@kno2/bluebutton 0.6.8 → 0.6.11
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/workflows/jira-dependabot-integration.yml +16 -16
- package/.github/workflows/npm-publish.yml +31 -29
- package/.jshintrc +35 -35
- package/.nvmrc +1 -1
- package/.travis.yml +5 -5
- package/LICENSE.md +11 -11
- package/README.md +47 -47
- package/build/bluebutton.js +1133 -1444
- package/build/bluebutton.js.map +1 -1
- package/karma.conf.js +69 -69
- package/package.json +29 -32
- package/webpack.config.js +37 -37
package/build/bluebutton.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bluebutton.js","mappings":"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;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;;;;;AClJA;AACA;AACA;AAEAf,MAAM,CAACC,OAAP,GAAiB;AACfa,EAAAA,GAAG,EAAEA;AADU,CAAjB;AAIA;AACA;AACA;;AACA,SAASA,GAAT,CAAaW,IAAb,EAAmBN,QAAnB,EAA6BC,WAA7B,EAA0C;AACxC;AAA2B;AAC3BU,EAAAA,OAAO,CAACC,GAAR,CAAY,uCAAZ;AACA,SAAO,IAAP;AACD;;AAAA;;;;;;;ACfD;AACA;AACA;AACA,IAAI0K,CAAC,GAAG7M,mBAAO,CAAC,GAAD,CAAf;;AAEAI,MAAM,CAACC,OAAP,GAAiB;AACfa,EAAAA,GAAG,EAAEA;AADU,CAAjB;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA,SAASA,GAAT,CAAaW,IAAb,EAAmBN,QAAnB,EAA6BC,WAA7B,EAA0C;AACxC,MAAI,CAACD,QAAL,EAAe;AACbW,IAAAA,OAAO,CAACC,GAAR,CAAY,kEACA,4DADZ;AAEA,WAAO,IAAP;AACD,GALuC,CAOxC;AACA;;;AACA,MAAI2K,GAAG,GAAItL,WAAD,GACR,IAAIoB,IAAJ,CAAS,sBAAT,CADQ,GAC2B,IAAIA,IAAJ,EADrC;;AAGA,MAAI+J,IAAI,GAAGE,CAAC,CAACtL,QAAF,CAAWA,QAAX,EAAqB;AAC9BwL,IAAAA,QAAQ,EAAE,UADoB;AAE9BC,IAAAA,EAAE,EAAEnL,IAF0B;AAG9BiL,IAAAA,GAAG,EAAEA,GAHyB;AAI9BG,IAAAA,UAAU,EAAEC,GAAG,CAACC,OAJc;AAK9BC,IAAAA,KAAK,EAAErN,IAAI,CAAC2B;AALkB,GAArB,CAAX;;AAOA,SAAOiL,IAAP;AACD;;AAAA;;;;;;;ACpCD;AACA;AACA;AACA,IAAI3L,GAAG,GAAGhB,mBAAO,CAAC,GAAD,CAAjB;;AACA,IAAIqB,GAAG,GAAGrB,mBAAO,CAAC,GAAD,CAAjB;;AACA,IAAImB,IAAI,GAAGnB,mBAAO,CAAC,GAAD,CAAlB;;AACA,IAAIoB,MAAM,GAAGpB,mBAAO,CAAC,GAAD,CAApB;;AAEA,IAAI4M,MAAM,GAAG,SAATA,MAAS,GAAY,CAAE,CAA3B;AAEA;;;AACAxM,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAACiD,MAAL,GAAcA,MAAd;AACAjD,EAAAA,IAAI,CAAC3I,GAAL,GAAW,IAAIA,GAAJ,CAAQ2I,IAAI,CAACnB,GAAb,CAAX;AACAmB,EAAAA,IAAI,CAACtI,GAAL,GAAW,IAAIA,GAAJ,CAAQsI,IAAI,CAACnB,GAAb,CAAX;AACAmB,EAAAA,IAAI,CAACxI,IAAL,GAAY,IAAIA,IAAJ,CAASwI,IAAI,CAACnB,GAAd,CAAZ;AACAmB,EAAAA,IAAI,CAACvI,MAAL,GAAc,IAAIA,MAAJ,CAAWuI,IAAI,CAACnB,GAAhB,CAAd;AACD,CARD;;;;;;;ACXA;AACA;AACA;AAEA,IAAIzI,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AACA,IAAIqN,eAAe,GAAGrN,mBAAO,CAAC,GAAD,CAA7B;;AACA,IAAIsN,kBAAkB,GAAGtN,mBAAO,CAAC,GAAD,CAAhC;;AACA,IAAIuN,cAAc,GAAGvN,mBAAO,CAAC,GAAD,CAA5B;;AACA,IAAIwN,gBAAgB,GAAGxN,mBAAO,CAAC,GAAD,CAA9B;;AACA,IAAIyN,mBAAmB,GAAGzN,mBAAO,CAAC,GAAD,CAAjC;;AACA,IAAI0N,iBAAiB,GAAG1N,mBAAO,CAAC,GAAD,CAA/B;;AACA,IAAI2N,cAAc,GAAG3N,mBAAO,CAAC,GAAD,CAA5B;;AACA,IAAI4N,gBAAgB,GAAG5N,mBAAO,CAAC,GAAD,CAA9B;;AACA,IAAI6N,aAAa,GAAG7N,mBAAO,CAAC,GAAD,CAA3B;;AACA,IAAI8N,YAAY,GAAG9N,mBAAO,CAAC,GAAD,CAA1B;;AACA,IAAI+N,gBAAgB,GAAG/N,mBAAO,CAAC,GAAD,CAA9B;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AAEAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAACqE,eAAL,GAAuB,IAAIX,eAAJ,CAAoB1D,IAAI,CAACnB,GAAzB,CAAvB;AACAmB,EAAAA,IAAI,CAACsE,kBAAL,GAA0B,IAAIX,kBAAJ,CAAuB3D,IAAI,CAACnB,GAA5B,CAA1B;AACAmB,EAAAA,IAAI,CAACsE,kBAAL,GAA0B,IAAIV,cAAJ,CAAmB5D,IAAI,CAACnB,GAAxB,CAA1B;AACAmB,EAAAA,IAAI,CAACuE,gBAAL,GAAwB,IAAIV,gBAAJ,CAAqB7D,IAAI,CAACnB,GAA1B,CAAxB;AACAmB,EAAAA,IAAI,CAACwE,mBAAL,GAA2B,IAAIV,mBAAJ,CAAwB9D,IAAI,CAACnB,GAA7B,CAA3B;AACAmB,EAAAA,IAAI,CAACyE,iBAAL,GAAyB,IAAIV,iBAAJ,CAAsB/D,IAAI,CAACnB,GAA3B,CAAzB;AACAmB,EAAAA,IAAI,CAAC0E,cAAL,GAAsB,IAAIV,cAAJ,CAAmBhE,IAAI,CAACnB,GAAxB,CAAtB;AACAmB,EAAAA,IAAI,CAAC2E,gBAAL,GAAwB,IAAIV,gBAAJ,CAAqBjE,IAAI,CAACnB,GAA1B,CAAxB;AACAmB,EAAAA,IAAI,CAAC4E,aAAL,GAAqB,IAAIV,aAAJ,CAAkBlE,IAAI,CAACnB,GAAvB,CAArB;AACAmB,EAAAA,IAAI,CAAC6E,YAAL,GAAoB,IAAIV,YAAJ,CAAiBnE,IAAI,CAACnB,GAAtB,CAApB;;AAEAmB,EAAAA,IAAI,CAACzI,GAAL,GAAW,UAAUuL,GAAV,EAAe;AACxB,QAAIhL,IAAI,GAAG,EAAX;AAEAA,IAAAA,IAAI,CAAC4H,QAAL,GAA6BM,IAAI,CAACsE,kBAAL,CAAwBjM,KAAxB,CAA8ByK,GAA9B,CAA7B;AACAhL,IAAAA,IAAI,CAACgN,SAAL,GAA6B9E,IAAI,CAACqE,eAAL,CAAqBhM,KAArB,CAA2ByK,GAA3B,CAA7B;AACAhL,IAAAA,IAAI,CAACiN,YAAL,GAA6B/E,IAAI,CAACsE,kBAAL,CAAwBjM,KAAxB,CAA8ByK,GAA9B,CAA7B;AACAhL,IAAAA,IAAI,CAACkN,UAAL,GAA6BhF,IAAI,CAACuE,gBAAL,CAAsBlM,KAAtB,CAA4ByK,GAA5B,CAA7B;AACA,QAAImC,mBAAmB,GAAMjF,IAAI,CAACwE,mBAAL,CAAyBnM,KAAzB,CAA+ByK,GAA/B,CAA7B;AACAhL,IAAAA,IAAI,CAACoN,aAAL,GAA6BD,mBAAmB,CAACE,YAAjD;AACArN,IAAAA,IAAI,CAACsN,qBAAL,GAA6BH,mBAAmB,CAACI,QAAjD;AACAvN,IAAAA,IAAI,CAACwN,OAAL,GAA6BtF,IAAI,CAAC4E,aAAL,CAAmBvM,KAAnB,CAAyByK,GAAzB,CAA7B;AACAhL,IAAAA,IAAI,CAACyN,WAAL,GAA6BvF,IAAI,CAACyE,iBAAL,CAAuBpM,KAAvB,CAA6ByK,GAA7B,CAA7B;AACAhL,IAAAA,IAAI,CAAC0N,QAAL,GAA6BxF,IAAI,CAAC0E,cAAL,CAAoBrM,KAApB,CAA0ByK,GAA1B,CAA7B;AACAhL,IAAAA,IAAI,CAAC2N,UAAL,GAA6BzF,IAAI,CAAC2E,gBAAL,CAAsBtM,KAAtB,CAA4ByK,GAA5B,CAA7B;AACAhL,IAAAA,IAAI,CAAC4N,MAAL,GAA6B1F,IAAI,CAAC0F,MAAL,CAAYrN,KAAZ,CAAkByK,GAAlB,CAA7B;AAEAhL,IAAAA,IAAI,CAACI,IAAL,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAAC4H,QAAL,CAAcxH,IAAd,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAACgN,SAAL,CAAe5M,IAAf,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAACiN,YAAL,CAAkB7M,IAAlB,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAACkN,UAAL,CAAgB9M,IAAhB,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAACoN,aAAL,CAAmBhN,IAAnB,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAACsN,qBAAL,CAA2BlN,IAA3B,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAACwN,OAAL,CAAapN,IAAb,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAACyN,WAAL,CAAiBrN,IAAjB,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAAC0N,QAAL,CAActN,IAAd,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAAC2N,UAAL,CAAgBvN,IAAhB,GAAkC9B,IAAI,CAAC8B,IAAvC;AACAJ,IAAAA,IAAI,CAAC4N,MAAL,CAAYxN,IAAZ,GAAkC9B,IAAI,CAAC8B,IAAvC,CA3BwB,CA6BxB;AACA;;AACAJ,IAAAA,IAAI,CAAC6N,cAAL,GAAsB;AACpBxE,MAAAA,IAAI,EAAE,IADc;AAEpB4B,MAAAA,IAAI,EAAE,IAFc;AAGpB6C,MAAAA,IAAI,EAAE,IAHc;AAIpBC,MAAAA,WAAW,EAAE,IAJO;AAKpBC,MAAAA,gBAAgB,EAAE;AALE,KAAtB;AAOAhO,IAAAA,IAAI,CAAC6N,cAAL,CAAoBzN,IAApB,GAA2B9B,IAAI,CAAC8B,IAAhC;AAEAJ,IAAAA,IAAI,CAACiO,eAAL,GAAuB;AACrBC,MAAAA,IAAI,EAAE;AADe,KAAvB;AAGAlO,IAAAA,IAAI,CAACiO,eAAL,CAAqB7N,IAArB,GAA4B9B,IAAI,CAAC8B,IAAjC;AAEAJ,IAAAA,IAAI,CAACmO,SAAL,GAAiB,EAAjB;AACAnO,IAAAA,IAAI,CAACmO,SAAL,CAAe/N,IAAf,GAAsB9B,IAAI,CAAC8B,IAA3B;AAEAJ,IAAAA,IAAI,CAACoO,YAAL,GAAoB,EAApB;AACApO,IAAAA,IAAI,CAACoO,YAAL,CAAkBhO,IAAlB,GAAyB9B,IAAI,CAAC8B,IAA9B;AAEAJ,IAAAA,IAAI,CAACqO,mBAAL,GAA2B,EAA3B;AACArO,IAAAA,IAAI,CAACqO,mBAAL,CAAyBjO,IAAzB,GAAgC9B,IAAI,CAAC8B,IAArC,CApDwB,CAsDxB;;AACAkM,IAAAA,gBAAgB,CAACtB,GAAD,EAAMhL,IAAN,CAAhB;AAEA,WAAOA,IAAP;AACD,GA1DD;AA2DD,CA1ED;;;;;;;ACjBA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAI0E,SAAS,GAAGhC,GAAG,CAACD,OAAJ,CAAY,WAAZ,CAAhB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,WAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBuH,SAAS,CAACnI,GAAV,CAAc,YAAd,EAA4BG,IAA5B,CAAiC,MAAjC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYlB,SAAS,CAACnI,GAAV,CAAc,MAAd,EAAsBK,GAAtB,CAA0B,IAA1B,CAAZ;AAEA8H,IAAAA,SAAS,CAAC7E,OAAV,GAAoBK,IAApB,CAAyB,UAAS+F,KAAT,EAAgB;AAEvC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAI2J,UAAU,GAAGpG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAA1B;AAAA,UACIyJ,QAAQ,GAAGrG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,OAApB,CAAD,CADxB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,MAArD,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB,CAPuC,CAYvC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,OAArD,CAAL;AACA,UAAI6J,kBAAkB,GAAGjK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAzB;AAAA,UACI2J,kBAAkB,GAAGlK,EAAE,CAACO,IAAH,CAAQ,MAAR,CADzB;AAAA,UAEI4J,yBAAyB,GAAGnK,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFhC;AAAA,UAGI6J,8BAA8B,GAAGpK,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHrC,CAduC,CAmBvC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,OAAnD,CAAL;AACA,UAAIiK,aAAa,GAAGrK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAApB;AAAA,UACI+J,aAAa,GAAGtK,EAAE,CAACO,IAAH,CAAQ,MAAR,CADpB;AAAA,UAEIgK,oBAAoB,GAAGvK,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF3B,CArBuC,CAyBvC;;AACA,UAAI,CAAC8J,aAAL,EAAoB;AAClBrK,QAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,MAAnD,CAAL;;AACA,YAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB2J,UAAAA,aAAa,GAAGxQ,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAhB;AACD;AACF,OA/BsC,CAiCvC;;;AACAT,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,OAAnD,CAAL;AACA,UAAIoK,QAAQ,GAAGxK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAf,CAnCuC,CAqCvC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,EAAyBA,GAAzB,CAA6B,MAA7B,CAAL;AACA,UAAIqK,aAAa,GAAGzK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAApB;AAAA,UACImK,aAAa,GAAG1K,EAAE,CAACO,IAAH,CAAQ,MAAR,CADpB;AAAA,UAEIoK,oBAAoB,GAAG3K,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF3B;AAAA,UAGIqK,yBAAyB,GAAG5K,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHhC,CAvCuC,CA4CvC;;AACA,UAAI,CAACkK,aAAL,EAAoB;AAClBzK,QAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,EAAyBA,GAAzB,CAA6B,MAA7B,CAAL;;AACA,YAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB+J,UAAAA,aAAa,GAAGzK,EAAE,CAACS,GAAH,EAAhB;AACD;AACF;;AACD,UAAI,CAACgK,aAAL,EAAoB;AAClBzK,QAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,cAArD,CAAL;;AACA,YAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB+J,UAAAA,aAAa,GAAG5Q,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAhB;AACD;AACF,OAxDsC,CA0DvC;;;AACAT,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,OAAnD,CAAL;AACA,UAAIyK,MAAM,GAAG7K,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAb;AAEAhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBkK,QAAAA,UAAU,EAAE;AACVC,UAAAA,KAAK,EAAEhB,UADG;AAEViB,UAAAA,GAAG,EAAEhB;AAFK,SADI;AAKhBxD,QAAAA,IAAI,EAAEA,IALU;AAMhB6C,QAAAA,IAAI,EAAEA,IANU;AAOhBC,QAAAA,WAAW,EAAEA,WAPG;AAQhBC,QAAAA,gBAAgB,EAAEA,gBARF;AAShBsB,QAAAA,MAAM,EAAEA,MATQ;AAUhBL,QAAAA,QAAQ,EAAEA,QAVM;AAWhBS,QAAAA,QAAQ,EAAE;AACRzE,UAAAA,IAAI,EAAE6D,aADE;AAERhB,UAAAA,IAAI,EAAEiB,aAFE;AAGRhB,UAAAA,WAAW,EAAEiB;AAHL,SAXM;AAgBhBW,QAAAA,aAAa,EAAE;AACb1E,UAAAA,IAAI,EAAEyD,kBADO;AAEbZ,UAAAA,IAAI,EAAEa,kBAFO;AAGbZ,UAAAA,WAAW,EAAEa,yBAHA;AAIbZ,UAAAA,gBAAgB,EAAEa;AAJL,SAhBC;AAsBhBe,QAAAA,QAAQ,EAAE;AACR3E,UAAAA,IAAI,EAAEiE,aADE;AAERpB,UAAAA,IAAI,EAAEqB,aAFE;AAGRpB,UAAAA,WAAW,EAAEqB,oBAHL;AAIRpB,UAAAA,gBAAgB,EAAEqB;AAJV;AAtBM,OAAlB;AA6BD,KA3FD;AA4FA,WAAOrP,IAAP;AACD;AACF,CAhHD;;;;;;;ACNA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAClB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAItI,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAIwI,YAAY,GAAGjC,GAAG,CAACD,OAAJ,CAAY,cAAZ,CAAnB;AAEA,QAAI8E,OAAO,GAAG5C,YAAY,CAACpI,GAAb,CAAiB,aAAjB,CAAd;AACAJ,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,SAAZ,EAAuBA,GAAvB,CAA2B,MAA3B,CAAL;AACA,QAAIiL,iBAAiB,GAAGzH,SAAS,CAAC5D,EAAD,CAAjC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,SAAZ,CAAL;AACA,QAAIkL,GAAG,GAAG3H,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,WAAP,EAAoBG,IAApB,CAAyB,OAAzB,CAAD,CAAnB;AAAA,QACIrB,MAAM,GAAGrF,IAAI,CAAC2B,KAAL,CAAW0D,MAAX,CAAkBc,EAAE,CAACI,GAAH,CAAO,0BAAP,EAAmCG,IAAnC,CAAwC,MAAxC,CAAlB,CADb;AAAA,QAEIgL,cAAc,GAAG1R,IAAI,CAAC2B,KAAL,CAAW4D,aAAX,CAAyBY,EAAE,CAACI,GAAH,CAAO,mBAAP,EAA4BG,IAA5B,CAAiC,MAAjC,CAAzB,CAFrB;AAIAP,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,MAAZ,CAAL;AACA,QAAIoL,oBAAoB,GAAG3H,YAAY,CAAC7D,EAAD,CAAvC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,SAAZ,CAAL;AACA,QAAIqL,IAAI,GAAGzL,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAX;AAAA,QACImL,IAAI,GAAG,IADX;AAAA,QAEIC,MAAM,GAAG,IAFb;AAIA,QAAIC,KAAK,GAAG,IAAZ;AAEA,QAAIC,QAAQ,GAAGT,OAAO,CAAChL,GAAR,CAAY,uBAAZ,EAAqCA,GAArC,CAAyC,cAAzC,EAAyDG,IAAzD,CAA8D,MAA9D,CAAf;AAAA,QACIuL,IAAI,GAAGV,OAAO,CAAChL,GAAR,CAAY,UAAZ,EAAwBG,IAAxB,CAA6B,aAA7B,CADX;AAAA,QAEIwL,SAAS,GAAGX,OAAO,CAAChL,GAAR,CAAY,iBAAZ,EAA+BG,IAA/B,CAAoC,aAApC,CAFhB;AAAA,QAGIjB,QAAQ,GAAG8L,OAAO,CAAChL,GAAR,CAAY,0BAAZ,EAAwCG,IAAxC,CAA6C,aAA7C,CAHf;AAKAP,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,YAAZ,CAAL;AACA,QAAI4L,eAAe,GAAGnI,YAAY,CAAC7D,EAAD,CAAlC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,UAAZ,CAAL;AACA,QAAI6L,qBAAqB,GAAGjM,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,aAApB,CAA5B;AAAA,QACE2L,0BAA0B,GAAGlM,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,MAApB,CAD/B;AAAA,QAEI4L,aAAa,GAAGnM,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CAFpB;AAIAP,IAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,gBAAP,EAAyBA,GAAzB,CAA6B,MAA7B,CAAL;AACA,QAAIgM,kBAAkB,GAAGxI,SAAS,CAAC5D,EAAD,CAAlC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,UAAZ,EAAwBA,GAAxB,CAA4B,MAA5B,CAAL;AACA,QAAIiM,qBAAqB,GAAGxI,YAAY,CAAC7D,EAAD,CAAxC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,sBAAZ,CAAL;AACA,QAAIkM,qBAAqB,GAAGtM,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAA5B;AAAA,QACI8L,cAAc,GAAGvM,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CADrB;AAAA,QAEIiM,qBAAqB,GAAG3I,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAFxC;AAIA7E,IAAAA,IAAI,GAAG;AACLiL,MAAAA,IAAI,EAAE6E,iBADD;AAELC,MAAAA,GAAG,EAAEA,GAFA;AAGLpM,MAAAA,MAAM,EAAEA,MAHH;AAILqM,MAAAA,cAAc,EAAEA,cAJX;AAKLkB,MAAAA,OAAO,EAAEjB,oBALJ;AAMLkB,MAAAA,KAAK,EAAE;AACLjB,QAAAA,IAAI,EAAEA,IADD;AAELC,QAAAA,IAAI,EAAEA,IAFD;AAGLC,QAAAA,MAAM,EAAEA;AAHH,OANF;AAWLC,MAAAA,KAAK,EAAEA,KAXF;AAYLC,MAAAA,QAAQ,EAAEA,QAZL;AAaLC,MAAAA,IAAI,EAAEA,IAbD;AAcLC,MAAAA,SAAS,EAAEA,SAdN;AAeLzM,MAAAA,QAAQ,EAAEA,QAfL;AAgBLqN,MAAAA,UAAU,EAAE;AACVxG,QAAAA,KAAK,EAAE6F,eAAe,CAAC7F,KADb;AAEVC,QAAAA,GAAG,EAAE4F,eAAe,CAAC5F,GAFX;AAGVC,QAAAA,OAAO,EAAE2F,eAAe,CAAC3F;AAHf,OAhBP;AAqBLuG,MAAAA,QAAQ,EAAE;AACRpG,QAAAA,IAAI,EAAE;AACJV,UAAAA,KAAK,EAAEsG,kBAAkB,CAACtG,KADtB;AAEJC,UAAAA,MAAM,EAAEqG,kBAAkB,CAACrG;AAFvB,SADE;AAKR8G,QAAAA,YAAY,EAAEZ,qBALN;AAMRa,QAAAA,iBAAiB,EAAEZ,0BANX;AAORO,QAAAA,OAAO,EAAEJ,qBAPD;AAQRK,QAAAA,KAAK,EAAE;AACLjB,UAAAA,IAAI,EAAEU;AADD;AARC,OArBL;AAiCLY,MAAAA,QAAQ,EAAE;AACRC,QAAAA,YAAY,EAAEV,qBADN;AAERI,QAAAA,KAAK,EAAEH,cAFC;AAGRE,QAAAA,OAAO,EAAED;AAHD;AAjCL,KAAP;AAwCA,WAAOjR,IAAP;AACD;;AAAA;AACF,CAlGD;;;;;;;ACNA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAItI,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAIsC,GAAG,GAAGiE,GAAG,CAACD,OAAJ,CAAY,UAAZ,CAAV,CAPkB,CASlB;;AACA,QAAI2G,SAAS,GAAI3K,GAAG,CAAChC,QAAJ,CAAa,YAAb,CAAjB;AACA,QAAI4M,YAAY,GAAGD,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAnB;AACA,QAAI4M,cAAJ;AACA,QAAGF,SAAS,CAACrO,MAAV,GAAkB,CAArB,EACEuO,cAAc,GAAGF,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAjB,CADF,KAGE4M,cAAc,GAAGD,YAAjB;AAEF,QAAIE,KAAK,GAAG9K,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,MAArB,CAAZ;AACA,QAAIS,UAAU,GAAGsB,GAAG,CAAClC,GAAJ,CAAQ,YAAR,EAAsBG,IAAtB,CAA2B,MAA3B,CAAjB;AACA,QAAIsJ,WAAW,GAAGvH,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,aAArB,CAAlB;AAEA,QAAI8M,MAAM,GAAG/K,GAAG,CAAClC,GAAJ,CAAQ,YAAR,CAAb;AACA,QAAIkN,WAAW,GAAGD,MAAM,CAACrN,EAAP,CAAU2B,UAA5B;AAEA,QAAI4L,QAAQ,GAAG,YAAf;AACA,QAAIC,UAAU,GAAG;AACflT,MAAAA,IAAI,EAAE,EADS;AAEfmT,MAAAA,SAAS,EAAE,EAFI;AAGfC,MAAAA,cAAc,EAAE,EAHD;AAIfC,MAAAA,OAAO,EAAE,EAJM;AAKfC,MAAAA,SAAS,EAAE;AALI,KAAjB;;AAQA,QAAGN,WAAW,IAAIA,WAAW,CAAC1O,MAAZ,GAAqB,CAAvC,EAA0C;AACxC2O,MAAAA,QAAQ,GAAG,cAAX;AACA,UAAI9D,IAAI,GAAG4D,MAAM,CAACjN,GAAP,CAAW,MAAX,CAAX;AACA,UAAIqN,SAAS,GAAG,EAAhB;AACA,UAAIC,cAAc,GAAG,EAArB;AACA,UAAIC,OAAO,GAAG,EAAd;AACA,UAAIC,SAAS,GAAG,EAAhB;AACA,UAAItT,IAAI,GAAG,EAAX,CAPwC,CASxC;;AACA,UAAGmP,IAAI,IAAIA,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAX,EAAmC;AACjCkN,QAAAA,SAAS,GAAGhE,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAZ;AACAmN,QAAAA,cAAc,GAAGjE,IAAI,CAAClJ,IAAL,CAAU,gBAAV,CAAjB;AACAoN,QAAAA,OAAO,GAAGlE,IAAI,CAAChJ,GAAL,EAAV;AACAnG,QAAAA,IAAI,GAAG,UAAP;AACD;;AAED,UAAGmP,IAAI,IAAI,CAACgE,SAAZ,EAAuB;AACrBG,QAAAA,SAAS,GAAGnE,IAAI,CAACrJ,GAAL,CAAS,WAAT,EAAsBG,IAAtB,CAA2B,OAA3B,CAAZ;AACAjG,QAAAA,IAAI,GAAG,WAAP;AACD;;AACDkT,MAAAA,UAAU,GAAG;AACXlT,QAAAA,IAAI,EAAEA,IADK;AAEXmT,QAAAA,SAAS,EAAEA,SAFA;AAGXC,QAAAA,cAAc,EAAEA,cAHL;AAIXC,QAAAA,OAAO,EAAEA,OAJE;AAKXC,QAAAA,SAAS,EAAEA;AALA,OAAb;AAOD;;AAED,QAAIC,OAAO,GAAG;AACZvT,MAAAA,IAAI,EAAE,QADM;AAEZwT,MAAAA,cAAc,EAAEZ,YAFJ;AAGZlM,MAAAA,UAAU,EAAEmM,cAHA;AAIZtD,MAAAA,WAAW,EAAEA,WAJD;AAKZuD,MAAAA,KAAK,EAAEA,KALK;AAMZG,MAAAA,QAAQ,EAAEA,QANE;AAOZC,MAAAA,UAAU,EAAEA;AAPA,KAAd;AAUA,QAAI5I,IAAI,GAAGjB,SAAS,CAACrB,GAAG,CAAClC,GAAJ,CAAQ,eAAR,EAAyBG,IAAzB,CAA8B,OAA9B,CAAD,CAApB;AACA,QAAIwN,KAAK,GAAGlU,IAAI,CAAC6B,eAAL,CAAqB4G,GAAG,CAAClC,GAAJ,CAAQ,OAAR,EAAiBK,GAAjB,EAArB,CAAZ;AAEA,QAAIuN,MAAM,GAAG1L,GAAG,CAAClC,GAAJ,CAAQ,QAAR,CAAb;AACAJ,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,gBAAX,EAA6BA,GAA7B,CAAiC,MAAjC,CAAL;AACA,QAAI6N,SAAS,GAAGrK,SAAS,CAAC5D,EAAD,CAAzB,CA/EkB,CAgFlB;AACA;;AACA,QAAI,CAACiO,SAAS,CAACpI,MAAX,IAAqB,CAACoI,SAAS,CAACnI,KAAV,CAAgBlH,MAAtC,IAAgD,CAACqP,SAAS,CAAClI,MAA/D,EAAuE;AACtEkI,MAAAA,SAAS,CAAClI,MAAV,GAAmB/F,EAAE,CAACS,GAAH,EAAnB;AACA;;AAEDT,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,MAAX,CAAL;AACA,QAAI8N,YAAY,GAAGrK,YAAY,CAAC7D,EAAD,CAA/B;AAEAA,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,SAAX,CAAL;AACA,QAAI+N,UAAU,GAAGnO,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAEA,QAAI6N,qBAAqB,GAAG,EAA5B;AACA,QAAIC,UAAU,GAAG/L,GAAG,CAAClC,GAAJ,CAAQ,iBAAR,EAA2BE,QAA3B,CAAoC,WAApC,CAAjB;;AACA,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0P,UAAU,CAACzP,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AAC1CqB,MAAAA,EAAE,GAAGqO,UAAU,CAAC1P,CAAD,CAAV,CAAcyB,GAAd,CAAkB,gBAAlB,EAAoCA,GAApC,CAAwC,MAAxC,CAAL;AACA,UAAIkO,mBAAmB,GAAG1K,SAAS,CAAC5D,EAAD,CAAnC;AACA,UAAIuO,eAAe,GAAGF,UAAU,CAAC1P,CAAD,CAAV,CAAcyB,GAAd,CAAkB,SAAlB,EAA6BG,IAA7B,CAAkC,OAAlC,CAAtB;AACA,UAAIiO,cAAc,GAAG3K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAAjC;AACAgO,MAAAA,qBAAqB,CAACxN,IAAtB,CAA2B;AACzB4F,QAAAA,IAAI,EAAE8H,mBADmB;AAEzB5B,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAE6C;AADD,SAFkB;AAKzB9B,QAAAA,OAAO,EAAE+B;AALgB,OAA3B;AAOD;;AAEDxO,IAAAA,EAAE,GAAGsC,GAAG,CAAClC,GAAJ,CAAQ,uBAAR,CAAL;AACA,QAAIqO,aAAa,GAAG5U,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB,CAApB;AACA,QAAIiO,kBAAkB,GAAG7K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAArC;AAEA,QAAIuO,cAAc,GAAG,IAArB;AACA3O,IAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,eAAP,CAAL;;AACA,QAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjBiO,MAAAA,cAAc,GAAGhL,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAA1B;AACD;;AAEDhF,IAAAA,IAAI,GAAG;AACLjB,MAAAA,IAAI,EAAEuT,OADD;AAELjJ,MAAAA,IAAI,EAAEA,IAFD;AAGLmJ,MAAAA,KAAK,EAAEA,KAHF;AAILC,MAAAA,MAAM,EAAE;AACNxH,QAAAA,IAAI,EAAEyH,SADA;AAENxB,QAAAA,OAAO,EAAEyB,YAFH;AAGNxB,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAEyC;AADD;AAHD,OAJH;AAWLS,MAAAA,gBAAgB,EAAER,qBAXb;AAYLS,MAAAA,QAAQ,EAAE;AACRrI,QAAAA,IAAI,EAAEiI,aADE;AAERhC,QAAAA,OAAO,EAAEiC,kBAFD;AAGRC,QAAAA,cAAc,EAAEA;AAHR;AAZL,KAAP;AAmBA,WAAOpT,IAAP;AACD;;AAAA;AACF,CAhJD;;;;;;;ACNA;AACA;AACA;AAEArB,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAI4E,UAAU,GAAGlC,GAAG,CAACD,OAAJ,CAAY,YAAZ,CAAjB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,YAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkByH,UAAU,CAACrI,GAAX,CAAe,YAAf,EAA6BG,IAA7B,CAAkC,MAAlC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYhB,UAAU,CAACrI,GAAX,CAAe,MAAf,EAAuBK,GAAvB,CAA2B,IAA3B,CAAZ;AAEAgI,IAAAA,UAAU,CAAC/E,OAAX,GAAqBK,IAArB,CAA0B,UAAS+F,KAAT,EAAgB;AAExC,UAAIlF,IAAI,GAAGjB,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BG,IAA3B,CAAgC,OAAhC,CAAD,CAApB;;AACA,UAAI,CAACqE,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGjB,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BA,GAA3B,CAA+B,KAA/B,EAAsCG,IAAtC,CAA2C,OAA3C,CAAD,CAAhB;AACD;;AAEDP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;AAAA,UAIIuO,mBAAmB,GAAG9O,EAAE,CAACO,IAAH,CAAQ,mBAAR,CAJ1B,CARwC,CAcxC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACIyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADvB;AAAA,UAEI0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF9B;AAAA,UAGI2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHnC,CAhBwC,CAqBxC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,CAAL;AACA,UAAI+O,cAAc,GAAGnP,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB;AAAA,UACI2O,cAAc,GAAGpP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADrB;AAAA,UAEI8O,qBAAqB,GAAGrP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF5B;AAAA,UAGI+O,0BAA0B,GAAGtP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHjC,CAvBwC,CA4BxC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,CAAL;AACA,UAAI4M,YAAY,GAAGhN,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAAnB;AAAA,UACI8O,aAAa,GAAG1L,YAAY,CAAC7D,EAAD,CADhC;AAEAuP,MAAAA,aAAa,CAACvC,YAAd,GAA6BA,YAA7B,CAhCwC,CAkCxC;;AACA,UAAIwC,QAAQ,GAAG,EAAf;AACA,UAAIC,UAAU,GAAG3F,KAAK,CAACxJ,QAAN,CAAe,mBAAf,CAAjB;;AACA,WAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8Q,UAAU,CAAC7Q,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AAC1CqB,QAAAA,EAAE,GAAGyP,UAAU,CAAC9Q,CAAD,CAAV,CAAcyB,GAAd,CAAkB,OAAlB,CAAL;AACAoP,QAAAA,QAAQ,CAAC5O,IAAT,CAAc;AACZ4F,UAAAA,IAAI,EAAExG,EAAE,CAACO,IAAH,CAAQ,aAAR,CADM;AAEZ8I,UAAAA,IAAI,EAAErJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CAFM;AAGZ+I,UAAAA,WAAW,EAAEtJ,EAAE,CAACO,IAAH,CAAQ,YAAR;AAHD,SAAd;AAKD;;AAEDhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEA,IADU;AAEhB4B,QAAAA,IAAI,EAAEA,IAFU;AAGhB6C,QAAAA,IAAI,EAAEA,IAHU;AAIhBC,QAAAA,WAAW,EAAEA,WAJG;AAKhBC,QAAAA,gBAAgB,EAAEA,gBALF;AAMhBuF,QAAAA,mBAAmB,EAAEA,mBANL;AAOhBU,QAAAA,QAAQ,EAAEA,QAPM;AAQhBE,QAAAA,WAAW,EAAE;AACXlJ,UAAAA,IAAI,EAAEuI,gBADK;AAEX1F,UAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,UAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,UAAAA,gBAAgB,EAAE2F;AAJP,SARG;AAchBS,QAAAA,SAAS,EAAE;AACTnJ,UAAAA,IAAI,EAAE2I,cADG;AAET9F,UAAAA,IAAI,EAAE+F,cAFG;AAGT9F,UAAAA,WAAW,EAAE+F,qBAHJ;AAIT9F,UAAAA,gBAAgB,EAAE+F;AAJT,SAdK;AAoBhBT,QAAAA,QAAQ,EAAEU;AApBM,OAAlB;AAsBD,KApED;AAsEA,WAAOhU,IAAP;AACD;;AAAA;AACF,CA1FD;;;;;;;ACJA;AACA;AACA;AACA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAI+L,gBAAgB,GAAG,EAAvB;AAAA,QAA2BC,YAAY,GAAG,EAA1C;AAAA,QAA8CC,OAA9C;AAAA,QAAuD9P,EAAvD;AAEA,QAAI2I,aAAa,GAAGpC,GAAG,CAACD,OAAJ,CAAY,eAAZ,CAApB;AAEAsJ,IAAAA,gBAAgB,CAAClM,OAAjB,GAA2B,EAA3B;AACAkM,IAAAA,gBAAgB,CAAC/F,WAAjB,GAA+B,eAA/B;AACA+F,IAAAA,gBAAgB,CAAC5O,UAAjB,GAA8B2H,aAAa,CAACvI,GAAd,CAAkB,YAAlB,EAAgCG,IAAhC,CAAqC,MAArC,CAA9B;AACAqP,IAAAA,gBAAgB,CAACnG,IAAjB,GAAwBd,aAAa,CAACvI,GAAd,CAAkB,MAAlB,EAA0BK,GAA1B,CAA8B,IAA9B,CAAxB;AAEAoP,IAAAA,YAAY,CAACnM,OAAb,GAAuB,EAAvB;AACAmM,IAAAA,YAAY,CAAChG,WAAb,GAA2B,wBAA3B;AACAgG,IAAAA,YAAY,CAAC7O,UAAb,GAA0B2H,aAAa,CAACvI,GAAd,CAAkB,YAAlB,EAAgCG,IAAhC,CAAqC,MAArC,CAA1B;AACAsP,IAAAA,YAAY,CAACpG,IAAb,GAAoBd,aAAa,CAACvI,GAAd,CAAkB,MAAlB,EAA0BK,GAA1B,CAA8B,IAA9B,CAApB;AAIAkI,IAAAA,aAAa,CAACjF,OAAd,GAAwBK,IAAxB,CAA6B,UAAS+F,KAAT,EAAgB;AAE3C;AACA9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAIwE,IAAI,GAAGjB,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAApB;;AACA,UAAI,CAACqE,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGjB,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAAhB;AACD,OAP0C,CAS3C;;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,yBAAV,CAAL;AACA,UAAI0I,QAAQ,GAAG9I,EAAE,CAACQ,QAAH,CAAY,aAAZ,CAAf,CAX2C,CAa3C;;AACAsP,MAAAA,OAAO,GAAGhG,KAAK,CAACzO,QAAN,CAAe,8BAAf,CAAV;AACA2E,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,MAAZ,CAAL;AACA,UAAI2P,YAAY,GAAG/P,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAnB;AAAA,UACIyP,YAAY,GAAGhQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADnB;AAAA,UAEI0P,mBAAmB,GAAGjQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF1B;AAAA,UAGI2P,wBAAwB,GAAGlQ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH/B,CAhB2C,CAqB3C;;AACAP,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,aAAZ,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACIyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADvB;AAAA,UAEI0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF9B;AAAA,UAGI2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHnC,CAvB2C,CA4B3C;;AACAP,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,eAAZ,CAAL;AACA,UAAI+P,UAAU,GAAGnQ,EAAE,CAACS,GAAH,EAAjB;AAEAT,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,0BAAZ,CAAL;AACA,UAAIgQ,iBAAiB,GAAGpQ,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAAxB,CAjC2C,CAmC3C;;AACAT,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,CAAL;AACA,UAAIiQ,UAAU,GAAGrQ,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAjB;AAAA,UACI+P,UAAU,GAAGtQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADjB;AAAA,UAEIgQ,iBAAiB,GAAGvQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFxB;AAAA,UAGIiQ,sBAAsB,GAAGxQ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH7B,CArC2C,CA0C3C;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,CAAL;AACA,UAAIoV,iBAAiB,GAAG5W,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB,CAAxB;AACAT,MAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,MAAP,CAAL;AACA,UAAIsQ,cAAc,GAAG1Q,EAAE,CAACO,IAAH,CAAQ,aAAR,CAArB;AAAA,UACIoQ,cAAc,GAAG3Q,EAAE,CAACO,IAAH,CAAQ,MAAR,CADrB;AAAA,UAEIqQ,qBAAqB,GAAG5Q,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF5B,CA9C2C,CAkD3C;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,CAAL;AACA,UAAIyQ,UAAU,GAAG7Q,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAAA,UACIuQ,SAAS,GAAG9Q,EAAE,CAACO,IAAH,CAAQ,MAAR,CADhB;AAGA,UAAIhF,IAAI,GAAIuN,QAAD,GAAa+G,YAAb,GAA4BD,gBAAvC;AACArU,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEA,IADU;AAEhBkL,QAAAA,OAAO,EAAE;AACPtJ,UAAAA,IAAI,EAAEuJ,YADC;AAEP1G,UAAAA,IAAI,EAAE2G,YAFC;AAGP1G,UAAAA,WAAW,EAAE2G,mBAHN;AAIP1G,UAAAA,gBAAgB,EAAE2G,wBAJX;AAKPR,UAAAA,WAAW,EAAE;AACXlJ,YAAAA,IAAI,EAAEuI,gBADK;AAEX1F,YAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,YAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,YAAAA,gBAAgB,EAAE2F;AAJP,WALN;AAWPiB,UAAAA,UAAU,EAAEA,UAXL;AAYPC,UAAAA,iBAAiB,EAAEA;AAZZ,SAFO;AAgBhBW,QAAAA,aAAa,EAAE;AACbvU,UAAAA,KAAK,EAAEqU,UADM;AAEbG,UAAAA,IAAI,EAAEF;AAFO,SAhBC;AAoBhBG,QAAAA,KAAK,EAAE;AACLzK,UAAAA,IAAI,EAAE6J,UADD;AAELhH,UAAAA,IAAI,EAAEiH,UAFD;AAGLhH,UAAAA,WAAW,EAAEiH,iBAHR;AAILhH,UAAAA,gBAAgB,EAAEiH;AAJb,SApBS;AA0BhB7G,QAAAA,YAAY,EAAE8G,iBA1BE;AA2BhBS,QAAAA,cAAc,EAAE;AACd1K,UAAAA,IAAI,EAAEkK,cADQ;AAEdrH,UAAAA,IAAI,EAAEsH,cAFQ;AAGdrH,UAAAA,WAAW,EAAEsH;AAHC;AA3BA,OAAlB;AAiCD,KAzFD;AA2FA,WAAO;AACLhI,MAAAA,YAAY,EAAEgH,gBADT;AAEL9G,MAAAA,QAAQ,EAAE+G;AAFL,KAAP;AAID;;AAAA;AACF,CA1HD;;;;;;;ACLA,IAAIhW,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;AAEA;AACA;AACA;;;AACAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAClB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIqF,WAAW,GAAGzC,GAAG,CAACD,OAAJ,CAAY,aAAZ,CAAlB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,aAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBgI,WAAW,CAAC5I,GAAZ,CAAgB,YAAhB,EAA8BG,IAA9B,CAAmC,MAAnC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYT,WAAW,CAAC5I,GAAZ,CAAgB,MAAhB,EAAwBK,GAAxB,CAA4B,IAA5B,CAAZ;AAEAuI,IAAAA,WAAW,CAACtF,OAAZ,GAAsBK,IAAtB,CAA2B,UAAS+F,KAAT,EAAgB;AAEzC,UAAIL,IAAI,GAAG,IAAX;AACAzJ,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,yBAAV,EAAqCC,iBAArC,CAAuD,MAAvD,CAAL;;AACA,UAAI,CAACL,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB;AACA;AACA+I,QAAAA,IAAI,GAAG5P,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAP;AACD;;AAED,UAAI0Q,cAAc,GAAGrH,KAAK,CAACxJ,QAAN,CAAe,eAAf,CAArB;AAEAN,MAAAA,EAAE,GAAGmR,cAAc,CAAC,CAAD,CAAnB,CAZyC,CAYjB;;AACxB,UAAIpH,UAAU,GAAG,IAAjB;AAAA,UAAuBC,QAAQ,GAAG,IAAlC;;AACA,UAAIhK,EAAJ,EAAQ;AACN+J,QAAAA,UAAU,GAAGpG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAAtB;AACAyJ,QAAAA,QAAQ,GAAGrG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,OAApB,CAAD,CAApB;AACD,OAjBwC,CAmBzC;AACA;;;AACAP,MAAAA,EAAE,GAAGmR,cAAc,CAAC,CAAD,CAAnB;AACA,UAAIC,aAAa,GAAG,IAApB;AAAA,UAA0BC,qBAAqB,GAAG,IAAlD;AAAA,UAAwDC,oBAAoB,GAAG,IAA/E;;AACA,UAAItR,EAAE,IAAIA,EAAE,CAACO,IAAH,CAAQ,UAAR,MAAwB,SAAlC,EAA6C;AAC3C,YAAIgR,oBAAoB,GAAGvR,EAAE,CAACO,IAAH,CAAQ,sBAAR,CAA3B;;AACA,YAAIgR,oBAAoB,KAAK,MAA7B,EAAqC;AACnCH,UAAAA,aAAa,GAAE,WAAf;AACD,SAFD,MAEO,IAAIG,oBAAoB,KAAK,OAA7B,EAAsC;AAC3CH,UAAAA,aAAa,GAAG,UAAhB;AACD;;AAEDpR,QAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,QAAP,CAAL;AACAiR,QAAAA,qBAAqB,GAAGrR,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAxB;AACA+Q,QAAAA,oBAAoB,GAAGtR,EAAE,CAACO,IAAH,CAAQ,MAAR,CAAvB;AACD;;AAEDP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,qBAAV,EAAiCA,GAAjC,CAAqC,MAArC,CAAL;AACA,UAAI2P,YAAY,GAAG/P,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAnB;AAAA,UACIyP,YAAY,GAAGhQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADnB;AAAA,UAEI0P,mBAAmB,GAAGjQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF1B;AAIA,UAAIiR,qBAAqB,GAAG,IAA5B;AACAxR,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,qBAAV,EAAiCA,GAAjC,CAAqC,cAArC,CAAL;;AACA,UAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB8Q,QAAAA,qBAAqB,GAAG3X,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAxB;AACD,OA7CwC,CA8CzC;;;AACA,UAAI,CAACsP,YAAD,IAAiByB,qBAArB,EAA4C;AAC1CzB,QAAAA,YAAY,GAAGyB,qBAAf;AACD,OAjDwC,CAmDzC;;;AACA,UAAI,CAACzB,YAAL,EAAmB;AACjB/P,QAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,qBAAV,EAAiCA,GAAjC,CAAqC,MAArC,CAAL;;AACA,YAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjBqP,UAAAA,YAAY,GAAGlW,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAf;AACD;AACF;;AAEDT,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,qBAAV,EAAiCA,GAAjC,CAAqC,aAArC,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACIyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADvB;AAAA,UAEI0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF9B;AAAA,UAGI2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHnC;AAKAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,CAAL;AACA,UAAIyQ,UAAU,GAAG7Q,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAAA,UACIuQ,SAAS,GAAG9Q,EAAE,CAACO,IAAH,CAAQ,MAAR,CADhB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,CAAL;AACA,UAAIqR,mBAAmB,GAAGzR,EAAE,CAACO,IAAH,CAAQ,OAAR,CAA1B;AAAA,UACImR,kBAAkB,GAAG1R,EAAE,CAACO,IAAH,CAAQ,MAAR,CADzB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,EAA0BA,GAA1B,CAA8B,OAA9B,CAAL;AACA,UAAIuR,iBAAiB,GAAG3R,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAxB;AAAA,UACIqR,iBAAiB,GAAG5R,EAAE,CAACO,IAAH,CAAQ,MAAR,CADxB;AAAA,UAEIsR,wBAAwB,GAAG7R,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF/B;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,OAAnD,CAAL;AACA,UAAI0R,WAAW,GAAG9R,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAlB;AAAA,UACIwR,WAAW,GAAG/R,EAAE,CAACO,IAAH,CAAQ,MAAR,CADlB;AAAA,UAEIyR,kBAAkB,GAAGhS,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFzB;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,CAAL;AACA,UAAIiQ,UAAU,GAAGrQ,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAjB;AAAA,UACI+P,UAAU,GAAGtQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADjB;AAAA,UAEIgQ,iBAAiB,GAAGvQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFxB;AAAA,UAGIiQ,sBAAsB,GAAGxQ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH7B,CApFyC,CAyFzC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,EAAyBA,GAAzB,CAA6B,eAA7B,CAAL;AACA,UAAI6R,YAAY,GAAGjS,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAAnB;AAEAT,MAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,MAAP,CAAL,CA7FyC,CA8FzC;AACA;;AACA6R,MAAAA,YAAY,GAAGjS,EAAE,CAACO,IAAH,CAAQ,aAAR,KAA0B0R,YAAzC;AACA,UAAIC,YAAY,GAAGlS,EAAE,CAACO,IAAH,CAAQ,MAAR,CAAnB;AAAA,UACI4R,mBAAmB,GAAGnS,EAAE,CAACO,IAAH,CAAQ,YAAR,CAD1B;AAAA,UAEI6R,wBAAwB,GAAGpS,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAF/B;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,wBAAV,CAAL;AACA,UAAIiS,mBAAmB,GAAGrS,EAAE,CAACO,IAAH,CAAQ,aAAR,CAA1B;AAAA,UACI+R,mBAAmB,GAAGtS,EAAE,CAACO,IAAH,CAAQ,MAAR,CAD1B;AAAA,UAEIgS,0BAA0B,GAAGvS,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFjC;AAAA,UAGIiS,+BAA+B,GAAGxS,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHtC,CAtGyC,CA2GzC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,CAAL;AACA,UAAIqS,uBAAuB,GAAGzS,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAA9B;AAAA,UACIiS,iBAAiB,GAAG,IADxB;AAGAnX,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBkK,QAAAA,UAAU,EAAE;AACVC,UAAAA,KAAK,EAAEhB,UADG;AAEViB,UAAAA,GAAG,EAAEhB;AAFK,SADI;AAKhBP,QAAAA,IAAI,EAAEA,IALU;AAMhBqG,QAAAA,OAAO,EAAE;AACPtJ,UAAAA,IAAI,EAAEuJ,YADC;AAEPtG,UAAAA,IAAI,EAAE+H,qBAFC;AAGPnI,UAAAA,IAAI,EAAE2G,YAHC;AAIP1G,UAAAA,WAAW,EAAE2G,mBAJN;AAKPP,UAAAA,WAAW,EAAE;AACXlJ,YAAAA,IAAI,EAAEuI,gBADK;AAEX1F,YAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,YAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,YAAAA,gBAAgB,EAAE2F;AAJP;AALN,SANO;AAkBhB6B,QAAAA,aAAa,EAAE;AACbvU,UAAAA,KAAK,EAAEqU,UADM;AAEbG,UAAAA,IAAI,EAAEF;AAFO,SAlBC;AAsBhB6B,QAAAA,aAAa,EAAE;AACbnW,UAAAA,KAAK,EAAEiV,mBADM;AAEbT,UAAAA,IAAI,EAAEU;AAFO,SAtBC;AA0BhBkB,QAAAA,YAAY,EAAE;AACZpM,UAAAA,IAAI,EAAEmL,iBADM;AAEZtI,UAAAA,IAAI,EAAEuI,iBAFM;AAGZtI,UAAAA,WAAW,EAAEuI;AAHD,SA1BE;AA+BhBgB,QAAAA,MAAM,EAAE;AACNrM,UAAAA,IAAI,EAAEsL,WADA;AAENzI,UAAAA,IAAI,EAAE0I,WAFA;AAGNzI,UAAAA,WAAW,EAAE0I;AAHP,SA/BQ;AAoChBf,QAAAA,KAAK,EAAE;AACLzK,UAAAA,IAAI,EAAE6J,UADD;AAELhH,UAAAA,IAAI,EAAEiH,UAFD;AAGLhH,UAAAA,WAAW,EAAEiH,iBAHR;AAILhH,UAAAA,gBAAgB,EAAEiH;AAJb,SApCS;AA0ChBsC,QAAAA,QAAQ,EAAE;AACRxY,UAAAA,IAAI,EAAE8W,aADE;AAER2B,UAAAA,YAAY,EAAE1B,qBAFN;AAGR2B,UAAAA,WAAW,EAAE1B;AAHL,SA1CM;AA+ChB2B,QAAAA,OAAO,EAAE;AACPzM,UAAAA,IAAI,EAAEyL,YADC;AAEP5I,UAAAA,IAAI,EAAE6I,YAFC;AAGP5I,UAAAA,WAAW,EAAE6I,mBAHN;AAIP5I,UAAAA,gBAAgB,EAAE6I;AAJX,SA/CO;AAqDhBc,QAAAA,cAAc,EAAE;AACd1M,UAAAA,IAAI,EAAE6L,mBADQ;AAEdhJ,UAAAA,IAAI,EAAEiJ,mBAFQ;AAGdhJ,UAAAA,WAAW,EAAEiJ,0BAHC;AAIdhJ,UAAAA,gBAAgB,EAAEiJ;AAJJ,SArDA;AA2DhBW,QAAAA,UAAU,EAAE;AACVnG,UAAAA,YAAY,EAAEyF,uBADJ;AAEVW,UAAAA,MAAM,EAAEV;AAFE;AA3DI,OAAlB;AAgED,KAhLD;AAkLA,WAAOnX,IAAP;AACD;;AAAA;AACF,CAnMD;;;;;;;ACLA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;AAEA;AACA;AACA;;;AACAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAIoF,QAAQ,GAAG1C,GAAG,CAACD,OAAJ,CAAY,UAAZ,CAAf;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,UAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBiI,QAAQ,CAAC7I,GAAT,CAAa,YAAb,EAA2BG,IAA3B,CAAgC,MAAhC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYR,QAAQ,CAAC7I,GAAT,CAAa,MAAb,EAAqBK,GAArB,CAAyB,IAAzB,CAAZ;AAEAwI,IAAAA,QAAQ,CAACvF,OAAT,GAAmBK,IAAnB,CAAwB,UAAS+F,KAAT,EAAgB;AAEtC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAI2J,UAAU,GAAGpG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAA1B;AAAA,UACIyJ,QAAQ,GAAGrG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,OAApB,CAAD,CADxB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,OAAnD,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB,CAPsC,CAYtC;AACA;;AACA,UAAI,CAACiG,IAAL,EAAW;AACTxG,QAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,cAAnD,CAAL;;AACA,YAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB8F,UAAAA,IAAI,GAAG3M,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAP;AACD;AACF;;AAEDT,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,EAA+C+E,GAA/C,CAAmD,aAAnD,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACIyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADvB;AAAA,UAEI0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF9B;AAAA,UAGI2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHnC;AAKAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,CAAL;AACA,UAAIwP,MAAM,GAAG7K,EAAE,CAACI,GAAH,CAAO,OAAP,EAAgBG,IAAhB,CAAqB,aAArB,CAAb;AAEA,UAAI8S,GAAG,GAAG,IAAV;AACArT,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,8BAAf,CAAL;;AACA,UAAI,CAAC2E,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB2S,QAAAA,GAAG,GAAGC,UAAU,CAACtT,EAAE,CAACI,GAAH,CAAO,OAAP,EAAgBG,IAAhB,CAAqB,OAArB,CAAD,CAAhB;AACD;;AAEDhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBkK,QAAAA,UAAU,EAAE;AACVC,UAAAA,KAAK,EAAEhB,UADG;AAEViB,UAAAA,GAAG,EAAEhB;AAFK,SADI;AAKhBxD,QAAAA,IAAI,EAAEA,IALU;AAMhBqE,QAAAA,MAAM,EAAEA,MANQ;AAOhBwI,QAAAA,GAAG,EAAEA,GAPW;AAQhBhK,QAAAA,IAAI,EAAEA,IARU;AAShBC,QAAAA,WAAW,EAAEA,WATG;AAUhBC,QAAAA,gBAAgB,EAAEA,gBAVF;AAWhBmG,QAAAA,WAAW,EAAE;AACXlJ,UAAAA,IAAI,EAAEuI,gBADK;AAEX1F,UAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,UAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,UAAAA,gBAAgB,EAAE2F;AAJP,SAXG;AAiBhBqE,QAAAA,OAAO,EAAE,IAjBO,CAiBF;;AAjBE,OAAlB;AAmBD,KAvDD;AAyDA,WAAOhY,IAAP;AACD;;AAAA;AACF,CA7ED;;;;;;;ACLA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAIqF,UAAU,GAAG3C,GAAG,CAACD,OAAJ,CAAY,YAAZ,CAAjB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,YAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBkI,UAAU,CAAC9I,GAAX,CAAe,YAAf,EAA6BG,IAA7B,CAAkC,MAAlC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYP,UAAU,CAAC9I,GAAX,CAAe,MAAf,EAAuBK,GAAvB,CAA2B,IAA3B,CAAZ;AAEAyI,IAAAA,UAAU,CAACxF,OAAX,GAAqBK,IAArB,CAA0B,UAAS+F,KAAT,EAAgB;AAExC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAIwE,IAAI,GAAGjB,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAApB;AAEAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;;AAIA,UAAI,CAACiG,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAG3M,IAAI,CAAC6B,eAAL,CAAqBoO,KAAK,CAAC1J,GAAN,CAAU,cAAV,EAA0BK,GAA1B,EAArB,CAAP;AACD,OAZuC,CAcxC;;;AACAT,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,UAAV,EAAsBA,GAAtB,CAA0B,MAA1B,CAAL;AACA,UAAIoT,aAAa,GAAGxT,EAAE,CAACO,IAAH,CAAQ,aAAR,CAApB;AAAA,UACIkT,aAAa,GAAGzT,EAAE,CAACO,IAAH,CAAQ,MAAR,CADpB;AAAA,UAEImT,oBAAoB,GAAG1T,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF3B;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,EAAuBA,GAAvB,CAA2B,MAA3B,CAAL;AACA,UAAI4M,YAAY,GAAGhN,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAAnB;AAAA,UACIiM,KAAK,GAAG1M,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CADZ;AAGA,UAAIoT,cAAc,GAAG9P,YAAY,CAAC7D,EAAD,CAAjC;AACA2T,MAAAA,cAAc,CAAC3G,YAAf,GAA8BA,YAA9B;AACA2G,MAAAA,cAAc,CAACjH,KAAf,GAAuBA,KAAvB,CA1BwC,CA4BxC;;AACA1M,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,EAAyBA,GAAzB,CAA6B,MAA7B,CAAL;AACA,UAAIwT,WAAW,GAAG5T,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAlB;AAAA,UACIsT,WAAW,GAAG7T,EAAE,CAACO,IAAH,CAAQ,MAAR,CADlB;AAAA,UAEIuT,kBAAkB,GAAG9T,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFzB;AAIAhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEA,IADU;AAEhB4B,QAAAA,IAAI,EAAEA,IAFU;AAGhB6C,QAAAA,IAAI,EAAEA,IAHU;AAIhBC,QAAAA,WAAW,EAAEA,WAJG;AAKhByK,QAAAA,QAAQ,EAAE;AACRvN,UAAAA,IAAI,EAAEgN,aADE;AAERnK,UAAAA,IAAI,EAAEoK,aAFE;AAGRnK,UAAAA,WAAW,EAAEoK;AAHL,SALM;AAUhB/D,QAAAA,SAAS,EAAEgE,cAVK;AAWhBK,QAAAA,MAAM,EAAE;AACNxN,UAAAA,IAAI,EAAEoN,WADA;AAENvK,UAAAA,IAAI,EAAEwK,WAFA;AAGNvK,UAAAA,WAAW,EAAEwK;AAHP;AAXQ,OAAlB;AAiBD,KAnDD;AAqDA,WAAOvY,IAAP;AACD;;AAAA;AACF,CAzED;;;;;;;ACNA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAIkF,OAAO,GAAGxC,GAAG,CAACD,OAAJ,CAAY,SAAZ,CAAd;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,SAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkB+H,OAAO,CAAC3I,GAAR,CAAY,YAAZ,EAA0BG,IAA1B,CAA+B,MAA/B,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYV,OAAO,CAAC3I,GAAR,CAAY,MAAZ,EAAoBK,GAApB,CAAwB,IAAxB,CAAZ;AAGAsI,IAAAA,OAAO,CAACrF,OAAR,GAAkBK,IAAlB,CAAuB,UAAS+F,KAAT,EAAgB;AAErC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAI6T,UAAU,GAAGtQ,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BG,IAA3B,CAAgC,OAAhC,CAAD,CAA1B;;AACA,UAAI,CAAC0T,UAAL,EAAiB;AACfA,QAAAA,UAAU,GAAGtQ,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BA,GAA3B,CAA+B,KAA/B,EAAsCG,IAAtC,CAA2C,OAA3C,CAAD,CAAtB;AACD,OANoC,CAQrC;;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAI8T,UAAU,GAAGlU,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAjB;AAAA,UACI4T,UAAU,GAAGnU,EAAE,CAACO,IAAH,CAAQ,MAAR,CADjB;AAAA,UAEI6T,iBAAiB,GAAGpU,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFxB;AAAA,UAGI8T,sBAAsB,GAAGrU,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH7B;AAKA,UAAI+T,WAAJ;AACA,UAAIC,KAAK,GAAGzK,KAAK,CAACxJ,QAAN,CAAe,aAAf,CAAZ;AACA,UAAIkU,UAAU,GAAG,EAAjB;;AAEA,WAAK,IAAI7V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4V,KAAK,CAAC3V,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;AACrC2V,QAAAA,WAAW,GAAGC,KAAK,CAAC5V,CAAD,CAAnB,CADqC,CAGrC;;AACA,YAAI2V,WAAW,CAACjZ,QAAZ,CAAqB,8BAArB,EAAqDoF,GAArD,EAAJ,EAAgE;AAC9D,cAAImE,IAAI,GAAGjB,SAAS,CAAC2Q,WAAW,CAAClU,GAAZ,CAAgB,eAAhB,EAAiCG,IAAjC,CAAsC,OAAtC,CAAD,CAApB;AAEAP,UAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,MAAhB,CAAL;AACA,cAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,cACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,cAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,cAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;;AAKA,cAAI,CAACiG,IAAL,EAAW;AACTA,YAAAA,IAAI,GAAG3M,IAAI,CAAC6B,eAAL,CAAqB4Y,WAAW,CAAClU,GAAZ,CAAgB,MAAhB,EAAwBK,GAAxB,EAArB,CAAP;AACD;;AAEDT,UAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,aAAhB,CAAL;AACA,cAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,cACAyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADnB;AAAA,cAEA0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF1B;AAAA,cAGA2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH/B;AAKAP,UAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,OAAhB,CAAL;AACA,cAAI5D,KAAK,GAAGwD,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAZ;AAAA,cACIyQ,IAAI,GAAGhR,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX,CApB8D,CAsB9D;AACA;;AACA,cAAI/D,KAAK,IAAI,CAACG,KAAK,CAAC2W,UAAU,CAAC9W,KAAD,CAAX,CAAnB,EAAwC;AACtCA,YAAAA,KAAK,GAAG8W,UAAU,CAAC9W,KAAD,CAAlB;AACD;;AACD,cAAI,CAACA,KAAL,EAAY;AACVA,YAAAA,KAAK,GAAGwD,EAAE,CAACS,GAAH,EAAR,CADU,CACQ;AACnB;;AAEDT,UAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,gBAAhB,CAAL;AACA,cAAIqU,oBAAoB,GAAG5a,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,MAA/B,EAAuCK,GAAvC,EAArB,CAA3B;AAAA,cACIiU,wBAAwB,GAAG1U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,KAA/B,EAAsCG,IAAtC,CAA2C,MAA3C,CAD/B;AAAA,cAEIoU,yBAAyB,GAAG3U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,KAA/B,EAAsCG,IAAtC,CAA2C,OAA3C,CAFhC;AAAA,cAGIqU,yBAAyB,GAAG5U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,MAA/B,EAAuCG,IAAvC,CAA4C,MAA5C,CAHhC;AAAA,cAIIsU,0BAA0B,GAAG7U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,MAA/B,EAAuCG,IAAvC,CAA4C,OAA5C,CAJjC;AAMAiU,UAAAA,UAAU,CAAC5T,IAAX,CAAgB;AACdgE,YAAAA,IAAI,EAAEA,IADQ;AAEd4B,YAAAA,IAAI,EAAEA,IAFQ;AAGdhK,YAAAA,KAAK,EAAEA,KAHO;AAIdwU,YAAAA,IAAI,EAAEA,IAJQ;AAKd3H,YAAAA,IAAI,EAAEA,IALQ;AAMdC,YAAAA,WAAW,EAAEA,WANC;AAOdC,YAAAA,gBAAgB,EAAEA,gBAPJ;AAQdmG,YAAAA,WAAW,EAAE;AACXlJ,cAAAA,IAAI,EAAEuI,gBADK;AAEX1F,cAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,cAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,cAAAA,gBAAgB,EAAE2F;AAJP,aARC;AAcd4F,YAAAA,eAAe,EAAE;AACfrL,cAAAA,IAAI,EAAEgL,oBADS;AAEfM,cAAAA,QAAQ,EAAEL,wBAFK;AAGfM,cAAAA,SAAS,EAAEL,yBAHI;AAIfM,cAAAA,SAAS,EAAEL,yBAJI;AAKfM,cAAAA,UAAU,EAAEL;AALG;AAdH,WAAhB;AAsBD;AACF;;AAEDtZ,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChB4F,QAAAA,IAAI,EAAE0N,UADU;AAEhB7K,QAAAA,IAAI,EAAE8K,UAFU;AAGhB7K,QAAAA,WAAW,EAAE8K,iBAHG;AAIhB7K,QAAAA,gBAAgB,EAAE8K,sBAJF;AAKhBzP,QAAAA,IAAI,EAAEqP,UALU;AAMhBM,QAAAA,KAAK,EAAEC;AANS,OAAlB;AAQD,KA9FD;AAgGA,WAAOjZ,IAAP;AACD;;AAAA;AACF,CArHD;;;;;;;ACNA;AACA;AACA;AAEArB,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC3H,KAAL,GAAaA,KAAb;;AAEA,WAASA,KAAT,CAAeyK,GAAf,EAAoB;AAElB,QAAI5C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAIsF,MAAM,GAAG5C,GAAG,CAACD,OAAJ,CAAY,QAAZ,CAAb;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,QAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBmI,MAAM,CAAC/I,GAAP,CAAW,YAAX,EAAyBG,IAAzB,CAA8B,MAA9B,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYN,MAAM,CAAC/I,GAAP,CAAW,MAAX,EAAmBK,GAAnB,CAAuB,IAAvB,CAAZ;AAEA0I,IAAAA,MAAM,CAACzF,OAAP,GAAiBK,IAAjB,CAAsB,UAAS+F,KAAT,EAAgB;AAEpC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAI+U,UAAU,GAAGxR,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAA1B;AAEA,UAAI9B,MAAJ;AACA,UAAIsK,OAAO,GAAGe,KAAK,CAACxJ,QAAN,CAAe,WAAf,CAAd;AACA,UAAI8U,YAAY,GAAG,EAAnB;;AAEA,WAAK,IAAIC,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGtM,OAAO,CAACnK,MAA5B,EAAoCyW,CAAC,EAArC,EAAyC;AACvC5W,QAAAA,MAAM,GAAGsK,OAAO,CAACsM,CAAD,CAAhB,CADuC,CAGvC;;AAEArV,QAAAA,EAAE,GAAGvB,MAAM,CAAC2B,GAAP,CAAW,MAAX,CAAL;AACA,YAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,YACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,YAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,YAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;AAKAP,QAAAA,EAAE,GAAGvB,MAAM,CAAC2B,GAAP,CAAW,OAAX,CAAL;AACA,YAAI5D,KAAK,GAAG8W,UAAU,CAACtT,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAAtB;AAAA,YACIyQ,IAAI,GAAGhR,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAGA6U,QAAAA,YAAY,CAACxU,IAAb,CAAkB;AAChB4F,UAAAA,IAAI,EAAEA,IADU;AAEhB6C,UAAAA,IAAI,EAAEA,IAFU;AAGhBC,UAAAA,WAAW,EAAEA,WAHG;AAIhBC,UAAAA,gBAAgB,EAAEA,gBAJF;AAKhB/M,UAAAA,KAAK,EAAEA,KALS;AAMhBwU,UAAAA,IAAI,EAAEA;AANU,SAAlB;AAQD;;AAEDzV,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEuQ,UADU;AAEhBpM,QAAAA,OAAO,EAAEqM;AAFO,OAAlB;AAID,KAtCD;AAwCA,WAAO7Z,IAAP;AACD;;AAAA;AACF,CA5DD;;;;;;;ACJA;AACA;AACA;AAEA,IAAIsM,gBAAgB,GAAG/N,mBAAO,CAAC,GAAD,CAA9B;;AACA,IAAID,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AACA,IAAIuN,cAAc,GAAGvN,mBAAO,CAAC,EAAD,CAA5B;;AACA,IAAIsN,kBAAkB,GAAGtN,mBAAO,CAAC,GAAD,CAAhC;;AACA,IAAIwb,oBAAoB,GAAGxb,mBAAO,CAAC,GAAD,CAAlC;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC8R,cAAL,GAAsB,IAAIlO,cAAJ,CAAmB5D,IAAI,CAACnB,GAAxB,CAAtB;AACAmB,EAAAA,IAAI,CAACsE,kBAAL,GAA0B,IAAIX,kBAAJ,CAAuB3D,IAAI,CAACnB,GAA5B,CAA1B;AACAmB,EAAAA,IAAI,CAAC+R,oBAAL,GAA4B,IAAIF,oBAAJ,CAAyB7R,IAAI,CAACnB,GAA9B,CAA5B;;AAEAmB,EAAAA,IAAI,CAACzI,GAAL,GAAW,UAAUyL,IAAV,EAAgB;AACzB,QAAIlL,IAAI,GAAG,EAAX;AAEAA,IAAAA,IAAI,CAAC4H,QAAL,GAA6BM,IAAI,CAAC8R,cAAL,CAAoBpS,QAApB,CAA6BsD,IAA7B,CAA7B;AACAlL,IAAAA,IAAI,CAACiN,YAAL,GAA6B/E,IAAI,CAACsE,kBAAL,CAAwBS,YAAxB,CAAqC/B,IAArC,CAA7B;AACAlL,IAAAA,IAAI,CAACka,wBAAL,GAAiChS,IAAI,CAAC+R,oBAAL,CAA0BC,wBAA1B,CAAmDhP,IAAnD,CAAjC;AACAlL,IAAAA,IAAI,CAACI,IAAL,GAA6B9B,IAAI,CAAC8B,IAAlC,CANyB,CAQzB;;AACAkM,IAAAA,gBAAgB,CAACpB,IAAD,EAAOlL,IAAP,CAAhB;AAEA,WAAOA,IAAP;AACD,GAZD;AAaD,CApBD;;;;;;;ACVA;AACA;AACA;AACA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAGAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAACN,QAAL,GAAgBA,QAAhB;;AAEA,WAASA,QAAT,CAAkBsD,IAAlB,EAAwB;AAEpB,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAItI,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAIsC,GAAG,GAAGmE,IAAI,CAACH,OAAL,CAAa,UAAb,CAAV;AACA,QAAI1B,IAAI,GAAGjB,SAAS,CAACrB,GAAG,CAAClC,GAAJ,CAAQ,eAAR,EAAyBG,IAAzB,CAA8B,OAA9B,CAAD,CAApB;AACA,QAAIwN,KAAK,GAAGlU,IAAI,CAAC6B,eAAL,CAAqB4G,GAAG,CAAClC,GAAJ,CAAQ,OAAR,EAAiBK,GAAjB,EAArB,CAAZ,CAToB,CAWpB;;AACA,QAAIwM,SAAS,GAAI3K,GAAG,CAAChC,QAAJ,CAAa,YAAb,CAAjB;AAEA,QAAI4M,YAAY,GAAGD,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAnB;AACA,QAAI4M,cAAJ;AACA,QAAGF,SAAS,CAACrO,MAAV,GAAkB,CAArB,EACEuO,cAAc,GAAGF,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAjB,CADF,KAGE4M,cAAc,GAAGD,YAAjB;AAEF,QAAIE,KAAK,GAAG9K,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,MAArB,CAAZ;AACA,QAAIS,UAAU,GAAGsB,GAAG,CAAClC,GAAJ,CAAQ,YAAR,EAAsBG,IAAtB,CAA2B,MAA3B,CAAjB;AACA,QAAIsJ,WAAW,GAAGvH,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,aAArB,CAAlB;AAEA,QAAI8M,MAAM,GAAG/K,GAAG,CAAClC,GAAJ,CAAQ,YAAR,CAAb;AACA,QAAIkN,WAAW,GAAGD,MAAM,CAACrN,EAAP,CAAU2B,UAA5B;AAEA,QAAI4L,QAAQ,GAAG,YAAf;AACA,QAAIC,UAAU,GAAG;AACflT,MAAAA,IAAI,EAAE,EADS;AAEfmT,MAAAA,SAAS,EAAE,EAFI;AAGfC,MAAAA,cAAc,EAAE,EAHD;AAIfC,MAAAA,OAAO,EAAE,EAJM;AAKfC,MAAAA,SAAS,EAAE;AALI,KAAjB;;AAOA,QAAGN,WAAW,IAAIA,WAAW,CAAC1O,MAAZ,GAAqB,CAAvC,EAA0C;AACxC2O,MAAAA,QAAQ,GAAG,cAAX;AACA,UAAI9D,IAAI,GAAG4D,MAAM,CAACjN,GAAP,CAAW,MAAX,CAAX;AACA,UAAIqN,SAAS,GAAG,EAAhB;AACA,UAAIC,cAAc,GAAG,EAArB;AACA,UAAIC,OAAO,GAAG,EAAd;AACA,UAAIC,SAAS,GAAG,EAAhB;AACA,UAAItT,IAAI,GAAG,EAAX,CAPwC,CASxC;;AACA,UAAGmP,IAAI,IAAIA,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAX,EAAmC;AACjCkN,QAAAA,SAAS,GAAGhE,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAZ;AACAmN,QAAAA,cAAc,GAAGjE,IAAI,CAAClJ,IAAL,CAAU,gBAAV,CAAjB;AACAoN,QAAAA,OAAO,GAAGlE,IAAI,CAAChJ,GAAL,EAAV;AACAnG,QAAAA,IAAI,GAAG,UAAP;AACD;;AAED,UAAGmP,IAAI,IAAI,CAACgE,SAAZ,EAAuB;AACrBG,QAAAA,SAAS,GAAGnE,IAAI,CAACrJ,GAAL,CAAS,WAAT,EAAsBG,IAAtB,CAA2B,OAA3B,CAAZ;AACAjG,QAAAA,IAAI,GAAG,WAAP;AACD;;AACDkT,MAAAA,UAAU,GAAG;AACXlT,QAAAA,IAAI,EAAEA,IADK;AAEXmT,QAAAA,SAAS,EAAEA,SAFA;AAGXC,QAAAA,cAAc,EAAEA,cAHL;AAIXC,QAAAA,OAAO,EAAEA,OAJE;AAKXC,QAAAA,SAAS,EAAEA;AALA,OAAb;AAOD;;AAED,QAAIC,OAAO,GAAG;AACZvT,MAAAA,IAAI,EAAE,QADM;AAEZwT,MAAAA,cAAc,EAAEZ,YAFJ;AAGZlM,MAAAA,UAAU,EAAEmM,cAHA;AAIZtD,MAAAA,WAAW,EAAEA,WAJD;AAKZuD,MAAAA,KAAK,EAAEA,KALK;AAMZG,MAAAA,QAAQ,EAAEA,QANE;AAOZC,MAAAA,UAAU,EAAEA;AAPA,KAAd;AAUA,QAAIQ,MAAM,GAAG1L,GAAG,CAAClC,GAAJ,CAAQ,QAAR,CAAb;AACAJ,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,gBAAX,EAA6BA,GAA7B,CAAiC,MAAjC,CAAL;AACA,QAAI6N,SAAS,GAAGrK,SAAS,CAAC5D,EAAD,CAAzB;AAEAA,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,MAAX,CAAL;AACA,QAAI8N,YAAY,GAAGrK,YAAY,CAAC7D,EAAD,CAA/B;AAEAA,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,SAAX,CAAL;AACA,QAAI+N,UAAU,GAAGnO,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAEA,QAAI6N,qBAAqB,GAAG,EAA5B;AACA,QAAIC,UAAU,GAAG/L,GAAG,CAAClC,GAAJ,CAAQ,iBAAR,EAA2BE,QAA3B,CAAoC,WAApC,CAAjB;;AACA,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0P,UAAU,CAACzP,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AAC1CqB,MAAAA,EAAE,GAAGqO,UAAU,CAAC1P,CAAD,CAAf;AACA,UAAI2P,mBAAmB,GAAG1K,SAAS,CAAC5D,EAAD,CAAnC;AACA,UAAIuO,eAAe,GAAGvO,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CAAtB;AACA,UAAIiO,cAAc,GAAG3K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAAjC;AACAgO,MAAAA,qBAAqB,CAACxN,IAAtB,CAA2B;AACzB4F,QAAAA,IAAI,EAAE8H,mBADmB;AAEzB5B,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAE6C;AADD,SAFkB;AAKzB9B,QAAAA,OAAO,EAAE+B;AALgB,OAA3B;AAOD;;AAEDxO,IAAAA,EAAE,GAAGsC,GAAG,CAAClC,GAAJ,CAAQ,uBAAR,EAAiCA,GAAjC,CAAqC,UAArC,CAAL;AACA,QAAIqO,aAAa,GAAG5U,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB,CAApB;AACA,QAAIiO,kBAAkB,GAAG7K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAArC;AAEA,QAAIuO,cAAc,GAAG,IAArB;AACA3O,IAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,eAAP,CAAL;;AACA,QAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjBiO,MAAAA,cAAc,GAAGhL,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAA1B;AACD;;AAEDhF,IAAAA,IAAI,GAAG;AACLjB,MAAAA,IAAI,EAAEuT,OADD;AAELjJ,MAAAA,IAAI,EAAEA,IAFD;AAGLmJ,MAAAA,KAAK,EAAEA,KAHF;AAILC,MAAAA,MAAM,EAAE;AACNxH,QAAAA,IAAI,EAAEyH,SADA;AAENxB,QAAAA,OAAO,EAAEyB,YAFH;AAGNxB,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAEyC;AADD;AAHD,OAJH;AAWLS,MAAAA,gBAAgB,EAAER,qBAXb;AAYLS,MAAAA,QAAQ,EAAE;AACRrI,QAAAA,IAAI,EAAEiI,aADE;AAERhC,QAAAA,OAAO,EAAEiC,kBAFD;AAGRC,QAAAA,cAAc,EAAEA;AAHR;AAZL,KAAP;AAmBA,WAAOpT,IAAP;AACD;;AAAA;AACJ,CA1ID;;;;;;;ACNA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AACA,IAAIqN,eAAe,GAAGrN,mBAAO,CAAC,GAAD,CAA7B;;AACA,IAAI4b,cAAc,GAAG5b,mBAAO,CAAC,GAAD,CAA5B;;AACA,IAAIsN,kBAAkB,GAAGtN,mBAAO,CAAC,GAAD,CAAhC;;AACA,IAAIuN,cAAc,GAAGvN,mBAAO,CAAC,GAAD,CAA5B;;AACA,IAAIwN,gBAAgB,GAAGxN,mBAAO,CAAC,GAAD,CAA9B;;AACA,IAAI6b,cAAc,GAAG7b,mBAAO,CAAC,GAAD,CAA5B;;AACA,IAAI8b,wBAAwB,GAAG9b,mBAAO,CAAC,GAAD,CAAtC;;AACA,IAAIyN,mBAAmB,GAAGzN,mBAAO,CAAC,GAAD,CAAjC;;AACA,IAAI+b,kBAAkB,GAAG/b,mBAAO,CAAC,GAAD,CAAhC;;AACA,IAAI0N,iBAAiB,GAAG1N,mBAAO,CAAC,GAAD,CAA/B;;AACA,IAAI2N,cAAc,GAAG3N,mBAAO,CAAC,GAAD,CAA5B;;AACA,IAAI4N,gBAAgB,GAAG5N,mBAAO,CAAC,GAAD,CAA9B;;AACA,IAAI6N,aAAa,GAAG7N,mBAAO,CAAC,GAAD,CAA3B;;AACA,IAAIgc,mBAAmB,GAAGhc,mBAAO,CAAC,GAAD,CAAjC;;AACA,IAAI8N,YAAY,GAAG9N,mBAAO,CAAC,GAAD,CAA1B;;AAEA,IAAI+N,gBAAgB,GAAG/N,mBAAO,CAAC,GAAD,CAA9B;AAEA;AACA;AACA;;;AACAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAACqE,eAAL,GAAuB,IAAIX,eAAJ,CAAoB1D,IAAI,CAACnB,GAAzB,CAAvB;AACAmB,EAAAA,IAAI,CAACsS,cAAL,GAAsB,IAAIL,cAAJ,CAAmBjS,IAAI,CAACnB,GAAxB,CAAtB;AACAmB,EAAAA,IAAI,CAACsE,kBAAL,GAA0B,IAAIX,kBAAJ,CAAuB3D,IAAI,CAACnB,GAA5B,CAA1B;AACAmB,EAAAA,IAAI,CAAC8R,cAAL,GAAsB,IAAIlO,cAAJ,CAAmB5D,IAAI,CAACnB,GAAxB,CAAtB;AACAmB,EAAAA,IAAI,CAACuE,gBAAL,GAAwB,IAAIV,gBAAJ,CAAqB7D,IAAI,CAACnB,GAA1B,CAAxB;AACAmB,EAAAA,IAAI,CAACuS,cAAL,GAAsB,IAAIL,cAAJ,EAAtB;AACAlS,EAAAA,IAAI,CAACwS,wBAAL,GAAgC,IAAIL,wBAAJ,CAA6BnS,IAAI,CAACnB,GAAlC,CAAhC;AACAmB,EAAAA,IAAI,CAACwE,mBAAL,GAA2B,IAAIV,mBAAJ,CAAwB9D,IAAI,CAACnB,GAA7B,CAA3B;AACAmB,EAAAA,IAAI,CAACyS,kBAAL,GAA0B,IAAIL,kBAAJ,EAA1B;AACApS,EAAAA,IAAI,CAACyE,iBAAL,GAAyB,IAAIV,iBAAJ,CAAsB/D,IAAI,CAACnB,GAA3B,CAAzB;AACAmB,EAAAA,IAAI,CAAC0E,cAAL,GAAsB,IAAIV,cAAJ,CAAmBhE,IAAI,CAACnB,GAAxB,CAAtB;AACAmB,EAAAA,IAAI,CAAC2E,gBAAL,GAAwB,IAAIV,gBAAJ,CAAqBjE,IAAI,CAACnB,GAA1B,CAAxB;AACAmB,EAAAA,IAAI,CAAC4E,aAAL,GAAqB,IAAIV,aAAJ,CAAkBlE,IAAI,CAACnB,GAAvB,CAArB;AACAmB,EAAAA,IAAI,CAAC0S,mBAAL,GAA2B,IAAIL,mBAAJ,CAAwBrS,IAAI,CAACnB,GAA7B,CAA3B;AACAmB,EAAAA,IAAI,CAAC6E,YAAL,GAAoB,IAAIV,YAAJ,CAAiBnE,IAAI,CAACnB,GAAtB,CAApB;;AAGAmB,EAAAA,IAAI,CAACzI,GAAL,GAAW,UAAUyL,IAAV,EAAgB;AACzB,QAAIlL,IAAI,GAAG,EAAX;AAEAA,IAAAA,IAAI,CAAC4H,QAAL,GAA6BM,IAAI,CAAC8R,cAAL,CAAoBpS,QAApB,CAA6BsD,IAA7B,CAA7B;AACAlL,IAAAA,IAAI,CAACgN,SAAL,GAA6B9E,IAAI,CAACqE,eAAL,CAAqBS,SAArB,CAA+B9B,IAA/B,CAA7B;AACAlL,IAAAA,IAAI,CAACmO,SAAL,GAA6BjG,IAAI,CAACsS,cAAL,CAAoBrM,SAApB,CAA8BjD,IAA9B,CAA7B;AACAlL,IAAAA,IAAI,CAACiO,eAAL,GAA6B/F,IAAI,CAACuS,cAAL,CAAoBI,SAApB,CAA8B3P,IAA9B,EAAoC,iBAApC,CAA7B;AACAlL,IAAAA,IAAI,CAACiN,YAAL,GAA6B/E,IAAI,CAACsE,kBAAL,CAAwBS,YAAxB,CAAqC/B,IAArC,CAA7B;AACAlL,IAAAA,IAAI,CAACkN,UAAL,GAA6BhF,IAAI,CAACuE,gBAAL,CAAsBS,UAAtB,CAAiChC,IAAjC,CAA7B;AACAlL,IAAAA,IAAI,CAACqO,mBAAL,GAA6BnG,IAAI,CAACwS,wBAAL,CAA8BrM,mBAA9B,CAAkDnD,IAAlD,CAA7B;AACA,QAAIiC,mBAAmB,GAAMjF,IAAI,CAACwE,mBAAL,CAAyBU,aAAzB,CAAuClC,IAAvC,CAA7B;AACAlL,IAAAA,IAAI,CAACoN,aAAL,GAA6BD,mBAAmB,CAACE,YAAjD;AACArN,IAAAA,IAAI,CAACsN,qBAAL,GAA6BH,mBAAmB,CAACI,QAAjD;AACAvN,IAAAA,IAAI,CAACoO,YAAL,GAA6BlG,IAAI,CAACyS,kBAAL,CAAwBvM,YAAxB,CAAqClD,IAArC,CAA7B;AACAlL,IAAAA,IAAI,CAACwN,OAAL,GAA6BtF,IAAI,CAAC4E,aAAL,CAAmBU,OAAnB,CAA2BtC,IAA3B,CAA7B;AACAlL,IAAAA,IAAI,CAACyN,WAAL,GAA6BvF,IAAI,CAACyE,iBAAL,CAAuBc,WAAvB,CAAmCvC,IAAnC,CAA7B;AACAlL,IAAAA,IAAI,CAAC0N,QAAL,GAA6BxF,IAAI,CAAC0E,cAAL,CAAoBc,QAApB,CAA6BxC,IAA7B,CAA7B;AACAlL,IAAAA,IAAI,CAAC2N,UAAL,GAA6BzF,IAAI,CAAC2E,gBAAL,CAAsBc,UAAtB,CAAiCzC,IAAjC,CAA7B;AACAlL,IAAAA,IAAI,CAAC6N,cAAL,GAA6B3F,IAAI,CAAC0S,mBAAL,CAAyB/M,cAAzB,CAAwC3C,IAAxC,CAA7B;AACAlL,IAAAA,IAAI,CAAC4N,MAAL,GAA6B1F,IAAI,CAAC6E,YAAL,CAAkBa,MAAlB,CAAyB1C,IAAzB,CAA7B;AAEAlL,IAAAA,IAAI,CAACI,IAAL,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAAC4H,QAAL,CAAcxH,IAAd,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACgN,SAAL,CAAe5M,IAAf,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACmO,SAAL,CAAe/N,IAAf,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACiO,eAAL,CAAqB7N,IAArB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACiN,YAAL,CAAkB7M,IAAlB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACkN,UAAL,CAAgB9M,IAAhB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACqO,mBAAL,CAAyBjO,IAAzB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACoN,aAAL,CAAmBhN,IAAnB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACsN,qBAAL,CAA2BlN,IAA3B,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACoO,YAAL,CAAkBhO,IAAlB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACwN,OAAL,CAAapN,IAAb,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAACyN,WAAL,CAAiBrN,IAAjB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAAC0N,QAAL,CAActN,IAAd,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAAC2N,UAAL,CAAgBvN,IAAhB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAAC6N,cAAL,CAAoBzN,IAApB,GAAmC9B,IAAI,CAAC8B,IAAxC;AACAJ,IAAAA,IAAI,CAAC4N,MAAL,CAAYxN,IAAZ,GAAmC9B,IAAI,CAAC8B,IAAxC,CArCyB,CAuCzB;;AACAkM,IAAAA,gBAAgB,CAACpB,IAAD,EAAOlL,IAAP,CAAhB;AAEA,WAAOA,IAAP;AACD,GA3CD;AA4CD,CAhED;;;;;;;ACtBA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAAC8E,SAAL,GAAiB,UAAU9B,IAAV,EAAgB;AAE/B,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAI0E,SAAS,GAAG9B,IAAI,CAACH,OAAL,CAAa,WAAb,CAAhB;AAEE,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,WAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBuH,SAAS,CAACnI,GAAV,CAAc,YAAd,EAA4BG,IAA5B,CAAiC,MAAjC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYlB,SAAS,CAACnI,GAAV,CAAc,MAAd,EAAsBK,GAAtB,CAA0B,IAA1B,CAAZ;AAEF8H,IAAAA,SAAS,CAAC7E,OAAV,GAAoBK,IAApB,CAAyB,UAAS+F,KAAT,EAAgB;AAEvC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAI2J,UAAU,GAAGpG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAA1B;AAAA,UACIyJ,QAAQ,GAAGrG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,OAApB,CAAD,CADxB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,MAArD,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB,CAPuC,CAYvC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,OAArD,CAAL;AACA,UAAI6J,kBAAkB,GAAGjK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAzB;AAAA,UACI2J,kBAAkB,GAAGlK,EAAE,CAACO,IAAH,CAAQ,MAAR,CADzB;AAAA,UAEI4J,yBAAyB,GAAGnK,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFhC;AAAA,UAGI6J,8BAA8B,GAAGpK,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHrC,CAduC,CAmBvC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,OAArD,CAAL;AACA,UAAIiK,aAAa,GAAGrK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAApB;AAAA,UACI+J,aAAa,GAAGtK,EAAE,CAACO,IAAH,CAAQ,MAAR,CADpB;AAAA,UAEIgK,oBAAoB,GAAGvK,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF3B,CArBuC,CAyBvC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,OAArD,CAAL;AACA,UAAIoK,QAAQ,GAAGxK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAf,CA3BuC,CA6BvC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,EAAyBA,GAAzB,CAA6B,MAA7B,CAAL;AACA,UAAIqK,aAAa,GAAGzK,EAAE,CAACO,IAAH,CAAQ,aAAR,CAApB;AAAA,UACImK,aAAa,GAAG1K,EAAE,CAACO,IAAH,CAAQ,MAAR,CADpB;AAAA,UAEIoK,oBAAoB,GAAG3K,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF3B;AAAA,UAGIqK,yBAAyB,GAAG5K,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHhC,CA/BuC,CAoCvC;;AACA,UAAI,CAACkK,aAAL,EAAoB;AAClBzK,QAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,EAAyBA,GAAzB,CAA6B,MAA7B,CAAL;;AACA,YAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB+J,UAAAA,aAAa,GAAGzK,EAAE,CAACS,GAAH,EAAhB;AACD;AACF;;AACD,UAAI,CAACgK,aAAL,EAAoB;AAClBzK,QAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,cAArD,CAAL;;AACA,YAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB+J,UAAAA,aAAa,GAAG5Q,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAhB;AACD;AACF,OAhDsC,CAkDvC;;;AACAT,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,iCAAf,EAAkD+E,GAAlD,CAAsD,OAAtD,CAAL;AACA,UAAIyK,MAAM,GAAG7K,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAb;AAEAhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBkK,QAAAA,UAAU,EAAE;AACVC,UAAAA,KAAK,EAAEhB,UADG;AAEViB,UAAAA,GAAG,EAAEhB;AAFK,SADI;AAKhBxD,QAAAA,IAAI,EAAEA,IALU;AAMhB6C,QAAAA,IAAI,EAAEA,IANU;AAOhBC,QAAAA,WAAW,EAAEA,WAPG;AAQhBC,QAAAA,gBAAgB,EAAEA,gBARF;AAShBsB,QAAAA,MAAM,EAAEA,MATQ;AAUhBL,QAAAA,QAAQ,EAAEA,QAVM;AAWhBS,QAAAA,QAAQ,EAAE;AACRzE,UAAAA,IAAI,EAAE6D,aADE;AAERhB,UAAAA,IAAI,EAAEiB,aAFE;AAGRhB,UAAAA,WAAW,EAAEiB;AAHL,SAXM;AAgBhBW,QAAAA,aAAa,EAAE;AACb1E,UAAAA,IAAI,EAAEyD,kBADO;AAEbZ,UAAAA,IAAI,EAAEa,kBAFO;AAGbZ,UAAAA,WAAW,EAAEa,yBAHA;AAIbZ,UAAAA,gBAAgB,EAAEa;AAJL,SAhBC;AAsBhBe,QAAAA,QAAQ,EAAE;AACR3E,UAAAA,IAAI,EAAEiE,aADE;AAERpB,UAAAA,IAAI,EAAEqB,aAFE;AAGRpB,UAAAA,WAAW,EAAEqB,oBAHL;AAIRpB,UAAAA,gBAAgB,EAAEqB;AAJV;AAtBM,OAAlB;AA6BD,KAnFD;AAqFA,WAAOrP,IAAP;AACD,GAnGD;AAoGD,CAxGD;;;;;;;;ACNA;AACA;AACA;AAEA;;AACA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC3B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACiG,SAAL,GAAiB,UAAUjD,IAAV,EAAgB;AAC7B,QAAIiD,SAAS,GAAGjD,IAAI,CAACH,OAAL,CAAa,WAAb,CAAhB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,WAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkB0I,SAAS,CAACtJ,GAAV,CAAc,YAAd,EAA4BG,IAA5B,CAAiC,MAAjC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYC,SAAS,CAACtJ,GAAV,CAAc,MAAd,EAAsBK,GAAtB,CAA0B,IAA1B,CAAZ;AAEAiJ,IAAAA,SAAS,CAAChG,OAAV,GAAoBK,IAApB,CAAyB,UAAU+F,KAAV,EAAiB;AAEtC,UAAItD,IAAI,GAAG,IAAX;AAAA,UACI6C,IAAI,GAAG,IADX;AAAA,UAEIC,WAAW,GAAG,IAFlB;AAAA,UAGIC,gBAAgB,GAAG,IAHvB,CAFsC,CAOtC;;AACAvJ,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,iCAAf,CAAL;;AACA,UAAI,CAAC2E,EAAE,CAACU,OAAH,EAAL,EAAmB;AACf8F,QAAAA,IAAI,GAAG,WAAP;AACH,OAFD,MAEO;AACHxG,QAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AAEAoG,QAAAA,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAP;AACA8I,QAAAA,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CAAP;AACA+I,QAAAA,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAAd;AACAgJ,QAAAA,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAAnB;AACH;;AAED,UAAIkJ,IAAI,GAAG5P,IAAI,CAAC6B,eAAL,CAAqBoO,KAAK,CAAC1J,GAAN,CAAU,MAAV,EAAkBK,GAAlB,CAAsB,IAAtB,CAArB,CAAX;AACA,UAAI4V,IAAI,GAAGvM,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BC,iBAA3B,CAA6C,QAA7C,EAAuDE,IAAvD,CAA4D,OAA5D,CAAX;AAEAhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AACd6I,QAAAA,IAAI,EAAEA,IADQ;AAEdjD,QAAAA,IAAI,EAAEA,IAFQ;AAGd6C,QAAAA,IAAI,EAAEA,IAHQ;AAIdC,QAAAA,WAAW,EAAEA,WAJC;AAKdC,QAAAA,gBAAgB,EAAEA,gBALJ;AAMd+M,QAAAA,cAAc,EAAExa,KAAK,CAACua,IAAD;AANP,OAAlB;AAQH,KA/BD;AAiCA,WAAO9a,IAAP;;AAEA,aAASO,KAAT,CAAegE,GAAf,EAAoB;AAChB,UAAI,CAACA,GAAL,EAAU,OAAO,IAAP;AACV,UAAIjC,CAAC,GAAGiC,GAAG,CAACoE,MAAJ,CAAW,CAAX,EAAc,CAAd,CAAR;AAAA,UACIqS,CAAC,GAAGzW,GAAG,CAACoE,MAAJ,CAAW,CAAX,EAAc,CAAd,IAAmB,CAD3B;AAAA,UAEIsS,CAAC,GAAG1W,GAAG,CAACoE,MAAJ,CAAW,CAAX,EAAc,CAAd,CAFR;AAGA,UAAIuS,CAAC,GAAG,IAAI/Z,IAAJ,CAASmB,CAAT,EAAY0Y,CAAZ,EAAeC,CAAf,CAAR;AACA,aAAQC,CAAC,CAAC/Y,WAAF,MAAmBG,CAAnB,IAAwB4Y,CAAC,CAACjZ,QAAF,MAAgB+Y,CAAxC,IAA6CE,CAAC,CAAChZ,OAAF,MAAe+Y,CAA7D,GAAkEC,CAAlE,GAAsE,IAA7E;AACH;AACJ,GApDD;AAqDH,CAzDD;;;;;;;ACPA;AACA;AACA;AACA,IAAI5c,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC+E,YAAL,GAAoBA,YAApB;;AAEA,WAASA,YAAT,CAAsB/B,IAAtB,EAA4B;AAE1B,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAItI,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAIwI,YAAY,GAAG/B,IAAI,CAACH,OAAL,CAAa,cAAb,CAAnB;AAEA,QAAI8E,OAAO,GAAG5C,YAAY,CAACpI,GAAb,CAAiB,aAAjB,CAAd;AACAJ,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,SAAZ,EAAuBA,GAAvB,CAA2B,MAA3B,CAAL;AACA,QAAIiL,iBAAiB,GAAGzH,SAAS,CAAC5D,EAAD,CAAjC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,SAAZ,CAAL;AACA,QAAIkL,GAAG,GAAG3H,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,WAAP,EAAoBG,IAApB,CAAyB,OAAzB,CAAD,CAAnB;AAAA,QACIrB,MAAM,GAAGrF,IAAI,CAAC2B,KAAL,CAAW0D,MAAX,CAAkBc,EAAE,CAACI,GAAH,CAAO,0BAAP,EAAmCG,IAAnC,CAAwC,MAAxC,CAAlB,CADb;AAAA,QAEIgL,cAAc,GAAG1R,IAAI,CAAC2B,KAAL,CAAW4D,aAAX,CAAyBY,EAAE,CAACI,GAAH,CAAO,mBAAP,EAA4BG,IAA5B,CAAiC,MAAjC,CAAzB,CAFrB;AAIAP,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,MAAZ,CAAL;AACA,QAAIoL,oBAAoB,GAAG3H,YAAY,CAAC7D,EAAD,CAAvC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,SAAZ,CAAL;AACA,QAAIqL,IAAI,GAAGzL,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAX;AAAA,QACImL,IAAI,GAAG,IADX;AAAA,QAEIC,MAAM,GAAG,IAFb;AAIA,QAAIC,KAAK,GAAG,IAAZ;AAEA,QAAIC,QAAQ,GAAGT,OAAO,CAAChL,GAAR,CAAY,uBAAZ,EAAqCA,GAArC,CAAyC,cAAzC,EAAyDG,IAAzD,CAA8D,MAA9D,CAAf;AAAA,QACIuL,IAAI,GAAGV,OAAO,CAAChL,GAAR,CAAY,UAAZ,EAAwBG,IAAxB,CAA6B,aAA7B,CADX;AAAA,QAEIwL,SAAS,GAAGX,OAAO,CAAChL,GAAR,CAAY,iBAAZ,EAA+BG,IAA/B,CAAoC,aAApC,CAFhB;AAAA,QAGIjB,QAAQ,GAAG8L,OAAO,CAAChL,GAAR,CAAY,0BAAZ,EAAwCG,IAAxC,CAA6C,aAA7C,CAHf;AAKAP,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,YAAZ,CAAL;AACA,QAAI4L,eAAe,GAAGnI,YAAY,CAAC7D,EAAD,CAAlC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,UAAZ,CAAL;AACA,QAAI6L,qBAAqB,GAAGjM,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,aAApB,CAA5B;AAAA,QACI2L,0BAA0B,GAAGlM,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,MAApB,CADjC;AAAA,QAEI4L,aAAa,GAAGnM,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CAFpB;AAIAP,IAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,gBAAP,EAAyBA,GAAzB,CAA6B,MAA7B,CAAL;AACA,QAAIgM,kBAAkB,GAAGxI,SAAS,CAAC5D,EAAD,CAAlC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,UAAZ,EAAwBA,GAAxB,CAA4B,MAA5B,CAAL;AACA,QAAIiM,qBAAqB,GAAGxI,YAAY,CAAC7D,EAAD,CAAxC;AAEAA,IAAAA,EAAE,GAAGoL,OAAO,CAAChL,GAAR,CAAY,sBAAZ,CAAL;AACA,QAAIkM,qBAAqB,GAAGtM,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAA5B;AAAA,QACI8L,cAAc,GAAGvM,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CADrB;AAGA,QAAIiM,qBAAqB,GAAG3I,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAAxC;AAEA7E,IAAAA,IAAI,GAAG;AACLiL,MAAAA,IAAI,EAAE6E,iBADD;AAELC,MAAAA,GAAG,EAAEA,GAFA;AAGLpM,MAAAA,MAAM,EAAEA,MAHH;AAILqM,MAAAA,cAAc,EAAEA,cAJX;AAKLkB,MAAAA,OAAO,EAAEjB,oBALJ;AAMLkB,MAAAA,KAAK,EAAE;AACLjB,QAAAA,IAAI,EAAEA,IADD;AAELC,QAAAA,IAAI,EAAEA,IAFD;AAGLC,QAAAA,MAAM,EAAEA;AAHH,OANF;AAWLC,MAAAA,KAAK,EAAEA,KAXF;AAYLC,MAAAA,QAAQ,EAAEA,QAZL;AAaLC,MAAAA,IAAI,EAAEA,IAbD;AAcLC,MAAAA,SAAS,EAAEA,SAdN;AAeLzM,MAAAA,QAAQ,EAAEA,QAfL;AAgBLqN,MAAAA,UAAU,EAAE;AACVxG,QAAAA,KAAK,EAAE6F,eAAe,CAAC7F,KADb;AAEVC,QAAAA,GAAG,EAAE4F,eAAe,CAAC5F,GAFX;AAGVC,QAAAA,OAAO,EAAE2F,eAAe,CAAC3F;AAHf,OAhBP;AAqBLuG,MAAAA,QAAQ,EAAE;AACRpG,QAAAA,IAAI,EAAE;AACJV,UAAAA,KAAK,EAAEsG,kBAAkB,CAACtG,KADtB;AAEJC,UAAAA,MAAM,EAAEqG,kBAAkB,CAACrG;AAFvB,SADE;AAKR8G,QAAAA,YAAY,EAAEZ,qBALN;AAMRa,QAAAA,iBAAiB,EAAEZ,0BANX;AAORO,QAAAA,OAAO,EAAEJ,qBAPD;AAQRK,QAAAA,KAAK,EAAE;AACLjB,UAAAA,IAAI,EAAEU;AADD;AARC,OArBL;AAiCLY,MAAAA,QAAQ,EAAE;AACRC,QAAAA,YAAY,EAAEV,qBADN;AAERI,QAAAA,KAAK,EAAEH,cAFC;AAGRE,QAAAA,OAAO,EAAED;AAHD;AAjCL,KAAP;AAwCA,WAAOjR,IAAP;AACD;;AAAA;AACF,CApGD;;;;;;;ACLA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACN,QAAL,GAAgB,UAAUsD,IAAV,EAAgB;AAE9B,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAItI,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAIsC,GAAG,GAAGmE,IAAI,CAACH,OAAL,CAAa,UAAb,CAAV,CAP8B,CAU9B;;AACA,QAAI2G,SAAS,GAAI3K,GAAG,CAAChC,QAAJ,CAAa,YAAb,CAAjB;AACA,QAAI4M,YAAY,GAAGD,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAnB;AACA,QAAI4M,cAAJ;AACA,QAAGF,SAAS,CAACrO,MAAV,GAAkB,CAArB,EACEuO,cAAc,GAAGF,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAjB,CADF,KAGE4M,cAAc,GAAGD,YAAjB;AAEF,QAAIE,KAAK,GAAG9K,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,MAArB,CAAZ;AACA,QAAIS,UAAU,GAAGsB,GAAG,CAAClC,GAAJ,CAAQ,YAAR,EAAsBG,IAAtB,CAA2B,MAA3B,CAAjB;AACA,QAAIsJ,WAAW,GAAGvH,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,aAArB,CAAlB;AAEA,QAAI8M,MAAM,GAAG/K,GAAG,CAAClC,GAAJ,CAAQ,YAAR,CAAb;AACA,QAAIkN,WAAW,GAAGD,MAAM,CAACrN,EAAP,CAAU2B,UAA5B;AAEA,QAAI4L,QAAQ,GAAG,YAAf;AACA,QAAIC,UAAU,GAAG;AACflT,MAAAA,IAAI,EAAE,EADS;AAEfmT,MAAAA,SAAS,EAAE,EAFI;AAGfC,MAAAA,cAAc,EAAE,EAHD;AAIfC,MAAAA,OAAO,EAAE,EAJM;AAKfC,MAAAA,SAAS,EAAE;AALI,KAAjB;;AAOA,QAAGN,WAAW,IAAIA,WAAW,CAAC1O,MAAZ,GAAqB,CAAvC,EAA0C;AACxC2O,MAAAA,QAAQ,GAAG,cAAX;AACA,UAAI9D,IAAI,GAAG4D,MAAM,CAACjN,GAAP,CAAW,MAAX,CAAX;AACA,UAAIqN,SAAS,GAAG,EAAhB;AACA,UAAIC,cAAc,GAAG,EAArB;AACA,UAAIC,OAAO,GAAG,EAAd;AACA,UAAIC,SAAS,GAAG,EAAhB;AACA,UAAItT,IAAI,GAAG,EAAX,CAPwC,CASxC;;AACA,UAAGmP,IAAI,IAAIA,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAX,EAAmC;AACjCkN,QAAAA,SAAS,GAAGhE,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAZ;AACAmN,QAAAA,cAAc,GAAGjE,IAAI,CAAClJ,IAAL,CAAU,gBAAV,CAAjB;AACAoN,QAAAA,OAAO,GAAGlE,IAAI,CAAChJ,GAAL,EAAV;AACAnG,QAAAA,IAAI,GAAG,UAAP;AACD;;AAED,UAAGmP,IAAI,IAAI,CAACgE,SAAZ,EAAuB;AACpBG,QAAAA,SAAS,GAAGnE,IAAI,CAACrJ,GAAL,CAAS,WAAT,EAAsBG,IAAtB,CAA2B,OAA3B,CAAZ;AACDjG,QAAAA,IAAI,GAAG,WAAP;AACD;;AACDkT,MAAAA,UAAU,GAAG;AACXlT,QAAAA,IAAI,EAAEA,IADK;AAEXmT,QAAAA,SAAS,EAAEA,SAFA;AAGXC,QAAAA,cAAc,EAAEA,cAHL;AAIXC,QAAAA,OAAO,EAAEA,OAJE;AAKXC,QAAAA,SAAS,EAAEA;AALA,OAAb;AAOD;;AAED,QAAIC,OAAO,GAAG;AACZvT,MAAAA,IAAI,EAAE,QADM;AAEZwT,MAAAA,cAAc,EAAEZ,YAFJ;AAGZlM,MAAAA,UAAU,EAAEmM,cAHA;AAIZtD,MAAAA,WAAW,EAAEA,WAJD;AAKZuD,MAAAA,KAAK,EAAEA,KALK;AAMZG,MAAAA,QAAQ,EAAEA,QANE;AAOZC,MAAAA,UAAU,EAAEA;AAPA,KAAd;AAUA,QAAI5I,IAAI,GAAGjB,SAAS,CAACrB,GAAG,CAAClC,GAAJ,CAAQ,eAAR,EAAyBG,IAAzB,CAA8B,OAA9B,CAAD,CAApB;AACA,QAAIwN,KAAK,GAAGlU,IAAI,CAAC6B,eAAL,CAAqB4G,GAAG,CAAClC,GAAJ,CAAQ,OAAR,EAAiBK,GAAjB,EAArB,CAAZ;AAEA,QAAIuN,MAAM,GAAG1L,GAAG,CAAClC,GAAJ,CAAQ,QAAR,CAAb;AACAJ,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,gBAAX,EAA6BA,GAA7B,CAAiC,MAAjC,CAAL;AACA,QAAI6N,SAAS,GAAGrK,SAAS,CAAC5D,EAAD,CAAzB;AAEAA,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,MAAX,CAAL;AACA,QAAI8N,YAAY,GAAGrK,YAAY,CAAC7D,EAAD,CAA/B;AAEAA,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,SAAX,CAAL;AACA,QAAI+N,UAAU,GAAGnO,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAEA,QAAI6N,qBAAqB,GAAG,EAA5B;AACA,QAAIC,UAAU,GAAG/L,GAAG,CAAClC,GAAJ,CAAQ,iBAAR,EAA2BE,QAA3B,CAAoC,WAApC,CAAjB;;AACA,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0P,UAAU,CAACzP,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AAC1CqB,MAAAA,EAAE,GAAGqO,UAAU,CAAC1P,CAAD,CAAf;AACA,UAAI2P,mBAAmB,GAAG1K,SAAS,CAAC5D,EAAD,CAAnC;AACA,UAAIuO,eAAe,GAAGvO,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CAAtB;AACA,UAAIiO,cAAc,GAAG3K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAAjC;AACAgO,MAAAA,qBAAqB,CAACxN,IAAtB,CAA2B;AACzB4F,QAAAA,IAAI,EAAE8H,mBADmB;AAEzB5B,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAE6C;AADD,SAFkB;AAKzB9B,QAAAA,OAAO,EAAE+B;AALgB,OAA3B;AAOD;;AAEDxO,IAAAA,EAAE,GAAGsC,GAAG,CAAClC,GAAJ,CAAQ,uBAAR,EAAiCA,GAAjC,CAAqC,UAArC,CAAL;AACA,QAAIqO,aAAa,GAAG5U,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB,CAApB;AACA,QAAIiO,kBAAkB,GAAG7K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAArC;AAEA,QAAIuO,cAAc,GAAG,IAArB;AACA3O,IAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,eAAP,CAAL;;AACA,QAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjBiO,MAAAA,cAAc,GAAGhL,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAA1B;AACD;;AAEDhF,IAAAA,IAAI,GAAG;AACLjB,MAAAA,IAAI,EAAEuT,OADD;AAELjJ,MAAAA,IAAI,EAAEA,IAFD;AAGLmJ,MAAAA,KAAK,EAAEA,KAHF;AAILC,MAAAA,MAAM,EAAE;AACNxH,QAAAA,IAAI,EAAEyH,SADA;AAENxB,QAAAA,OAAO,EAAEyB,YAFH;AAGNxB,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAEyC;AADD;AAHD,OAJH;AAWLS,MAAAA,gBAAgB,EAAER,qBAXb;AAYLS,MAAAA,QAAQ,EAAE;AACRrI,QAAAA,IAAI,EAAEiI,aADE;AAERhC,QAAAA,OAAO,EAAEiC,kBAFD;AAGRC,QAAAA,cAAc,EAAEA;AAHR;AAZL,KAAP;AAmBA,WAAOpT,IAAP;AACD,GArID;AAsID,CA1ID;;;;;;;ACNA;AACA;AACA;AAEArB,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACgF,UAAL,GAAkB,UAAUhC,IAAV,EAAgB;AAEhC,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAI4E,UAAU,GAAGhC,IAAI,CAACH,OAAL,CAAa,YAAb,CAAjB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,YAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkByH,UAAU,CAACrI,GAAX,CAAe,YAAf,EAA6BG,IAA7B,CAAkC,MAAlC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYhB,UAAU,CAACrI,GAAX,CAAe,MAAf,EAAuBK,GAAvB,CAA2B,IAA3B,CAAZ;AAEAgI,IAAAA,UAAU,CAAC/E,OAAX,GAAqBK,IAArB,CAA0B,UAAS+F,KAAT,EAAgB;AAExC,UAAIlF,IAAI,GAAGjB,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BG,IAA3B,CAAgC,OAAhC,CAAD,CAApB;AAEAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;AAAA,UAIIuO,mBAAmB,GAAG9O,EAAE,CAACO,IAAH,CAAQ,mBAAR,CAJ1B,CALwC,CAWxC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACIyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADvB;AAAA,UAEI0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF9B;AAAA,UAGI2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHnC,CAbwC,CAkBxC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,EAAuBA,GAAvB,CAA2B,MAA3B,CAAL;AACA,UAAI+O,cAAc,GAAGnP,EAAE,CAACO,IAAH,CAAQ,aAAR,CAArB;AAAA,UACI6O,cAAc,GAAGpP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADrB;AAAA,UAEI8O,qBAAqB,GAAGrP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF5B;AAAA,UAGI+O,0BAA0B,GAAGtP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHjC,CApBwC,CAyBxC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,CAAL;AACA,UAAI4M,YAAY,GAAGhN,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,aAApB,CAAnB;AAEA,UAAIgP,aAAa,GAAG1L,YAAY,CAAC7D,EAAD,CAAhC;AACAuP,MAAAA,aAAa,CAACvC,YAAd,GAA6BA,YAA7B,CA9BwC,CAgCxC;;AACA,UAAIwC,QAAQ,GAAG,EAAf;AACA,UAAIC,UAAU,GAAG3F,KAAK,CAACxJ,QAAN,CAAe,mBAAf,CAAjB;;AACA,WAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG8Q,UAAU,CAAC7Q,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AAC1CqB,QAAAA,EAAE,GAAGyP,UAAU,CAAC9Q,CAAD,CAAV,CAAcyB,GAAd,CAAkB,OAAlB,CAAL;AACAoP,QAAAA,QAAQ,CAAC5O,IAAT,CAAc;AACZ4F,UAAAA,IAAI,EAAExG,EAAE,CAACO,IAAH,CAAQ,aAAR,CADM;AAEZ8I,UAAAA,IAAI,EAAErJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CAFM;AAGZ+I,UAAAA,WAAW,EAAEtJ,EAAE,CAACO,IAAH,CAAQ,YAAR;AAHD,SAAd;AAKD;;AAEDhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEA,IADU;AAEhB4B,QAAAA,IAAI,EAAEA,IAFU;AAGhB6C,QAAAA,IAAI,EAAEA,IAHU;AAIhBC,QAAAA,WAAW,EAAEA,WAJG;AAKhBC,QAAAA,gBAAgB,EAAEA,gBALF;AAMhBuF,QAAAA,mBAAmB,EAAEA,mBANL;AAOhBU,QAAAA,QAAQ,EAAEA,QAPM;AAQhBE,QAAAA,WAAW,EAAE;AACXlJ,UAAAA,IAAI,EAAEuI,gBADK;AAEX1F,UAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,UAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,UAAAA,gBAAgB,EAAE2F;AAJP,SARG;AAchBS,QAAAA,SAAS,EAAE;AACTnJ,UAAAA,IAAI,EAAE2I,cADG;AAET9F,UAAAA,IAAI,EAAE+F,cAFG;AAGT9F,UAAAA,WAAW,EAAE+F,qBAHJ;AAIT9F,UAAAA,gBAAgB,EAAE+F;AAJT,SAdK;AAoBhBT,QAAAA,QAAQ,EAAEU;AApBM,OAAlB;AAsBD,KAlED;AAoEA,WAAOhU,IAAP;AACD,GAlFD;AAmFD,CAvFD;;;;;;;ACJA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,YAAW;AAC1B,MAAIsJ,IAAI,GAAG,IAAX;;AAEAA,EAAAA,IAAI,CAAC2S,SAAL,GAAiB,UAAU3P,IAAV,EAAgBiQ,WAAhB,EAA6B;AAC5C,QAAInb,IAAI,GAAG,EAAX;AAEA,QAAI+G,GAAG,GAAGmE,IAAI,CAACH,OAAL,CAAaoQ,WAAb,CAAV;AACA,QAAIjN,IAAI,GAAG5P,IAAI,CAAC6B,eAAL,CAAqB4G,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBK,GAAhB,CAAoB,IAApB,CAArB,CAAX;AAEAlF,IAAAA,IAAI,GAAG;AACLkO,MAAAA,IAAI,EAAEA;AADD,KAAP;AAIA,WAAOlO,IAAP;AACD,GAXD;AAYD,CAfD;;;;;;;ACNA;AACA;AACA;AAEArB,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACmG,mBAAL,GAA2B,UAAUnD,IAAV,EAAgB;AAEzC,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIpI,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAI2W,QAAQ,GAAGlQ,IAAI,CAACH,OAAL,CAAa,qBAAb,CAAf;AAEAqQ,IAAAA,QAAQ,CAACjT,OAAT,GAAmBK,IAAnB,CAAwB,UAAS+F,KAAT,EAAgB;AAEtC,UAAIlF,IAAI,GAAGjB,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BG,IAA3B,CAAgC,OAAhC,CAAD,CAApB;;AACA,UAAI,CAACqE,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGjB,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,EAA2BA,GAA3B,CAA+B,KAA/B,EAAsCG,IAAtC,CAA2C,OAA3C,CAAD,CAAhB;AACD;;AAEDP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,OAAV,CAAL;AAEA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;AAKAhF,MAAAA,IAAI,CAACqF,IAAL,CAAU;AACRgE,QAAAA,IAAI,EAAEA,IADE;AAER4B,QAAAA,IAAI,EAAEA,IAFE;AAGR6C,QAAAA,IAAI,EAAEA,IAHE;AAIRC,QAAAA,WAAW,EAAEA,WAJL;AAKRC,QAAAA,gBAAgB,EAAEA;AALV,OAAV;AAQD,KAtBD;AAwBA,WAAOhO,IAAP;AACD,GAhCD;AAiCD,CArCD;;;;;;;ACJA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACkF,aAAL,GAAqB,UAAUlC,IAAV,EAAgB;AACnC,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAI+L,gBAAgB,GAAG,EAAvB;AAAA,QAA2BC,YAAY,GAAG,EAA1C;AAAA,QAA8CC,OAA9C;AAAA,QAAuD9P,EAAvD;AAEA,QAAI2I,aAAa,GAAGlC,IAAI,CAACH,OAAL,CAAa,eAAb,CAApB;AAEAsJ,IAAAA,gBAAgB,CAAClM,OAAjB,GAA2B,EAA3B;AACAkM,IAAAA,gBAAgB,CAAC/F,WAAjB,GAA+B,eAA/B;AACA+F,IAAAA,gBAAgB,CAAC5O,UAAjB,GAA8B2H,aAAa,CAACvI,GAAd,CAAkB,YAAlB,EAAgCG,IAAhC,CAAqC,MAArC,CAA9B;AACAqP,IAAAA,gBAAgB,CAACnG,IAAjB,GAAwBd,aAAa,CAACvI,GAAd,CAAkB,MAAlB,EAA0BK,GAA1B,CAA8B,IAA9B,CAAxB;AAEAoP,IAAAA,YAAY,CAACnM,OAAb,GAAuB,EAAvB;AACAmM,IAAAA,YAAY,CAAChG,WAAb,GAA2B,wBAA3B;AACAgG,IAAAA,YAAY,CAAC7O,UAAb,GAA0B2H,aAAa,CAACvI,GAAd,CAAkB,YAAlB,EAAgCG,IAAhC,CAAqC,MAArC,CAA1B;AACAsP,IAAAA,YAAY,CAACpG,IAAb,GAAoBd,aAAa,CAACvI,GAAd,CAAkB,MAAlB,EAA0BK,GAA1B,CAA8B,IAA9B,CAApB;AAEAkI,IAAAA,aAAa,CAACjF,OAAd,GAAwBK,IAAxB,CAA6B,UAAS+F,KAAT,EAAgB;AAE3C;AACA9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAIwE,IAAI,GAAGjB,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAApB;;AACA,UAAI,CAACqE,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAGjB,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAAhB;AACD,OAP0C,CAS3C;;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,yBAAV,CAAL;AACA,UAAI0I,QAAQ,GAAG9I,EAAE,CAACQ,QAAH,CAAY,aAAZ,CAAf,CAX2C,CAa3C;;AACAsP,MAAAA,OAAO,GAAGhG,KAAK,CAACzO,QAAN,CAAe,iCAAf,CAAV;AACA2E,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,MAAZ,CAAL;AACA,UAAI2P,YAAY,GAAG/P,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAnB;AAAA,UACIyP,YAAY,GAAGhQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADnB;AAAA,UAEI0P,mBAAmB,GAAGjQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF1B;AAAA,UAGI2P,wBAAwB,GAAGlQ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH/B,CAhB2C,CAqB3C;;AACAP,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,aAAZ,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACIyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADvB;AAAA,UAEI0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF9B;AAAA,UAGI2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHnC,CAvB2C,CA4B3C;;AACAP,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,eAAZ,CAAL;AACA,UAAI+P,UAAU,GAAGnQ,EAAE,CAACS,GAAH,EAAjB;AAEAT,MAAAA,EAAE,GAAG8P,OAAO,CAAC1P,GAAR,CAAY,0BAAZ,CAAL;AACA,UAAIgQ,iBAAiB,GAAGpQ,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAAxB,CAjC2C,CAmC3C;;AACAT,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,CAAL;AACA,UAAIiQ,UAAU,GAAGrQ,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAjB;AAAA,UACI+P,UAAU,GAAGtQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADjB;AAAA,UAEIgQ,iBAAiB,GAAGvQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFxB;AAAA,UAGIiQ,sBAAsB,GAAGxQ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH7B,CArC2C,CA0C3C;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,iCAAf,CAAL;AACA,UAAIoV,iBAAiB,GAAG5W,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB,CAAxB;AACAT,MAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,MAAP,CAAL;AACA,UAAIsQ,cAAc,GAAG1Q,EAAE,CAACO,IAAH,CAAQ,aAAR,CAArB;AAAA,UACIoQ,cAAc,GAAG3Q,EAAE,CAACO,IAAH,CAAQ,MAAR,CADrB;AAAA,UAEIqQ,qBAAqB,GAAG5Q,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF5B,CA9C2C,CAkD3C;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,CAAL;AACA,UAAIyQ,UAAU,GAAG7Q,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAAA,UACIuQ,SAAS,GAAG9Q,EAAE,CAACO,IAAH,CAAQ,MAAR,CADhB;AAGA,UAAIhF,IAAI,GAAIuN,QAAD,GAAa+G,YAAb,GAA4BD,gBAAvC;AACArU,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEA,IADU;AAEhBkL,QAAAA,OAAO,EAAE;AACPtJ,UAAAA,IAAI,EAAEuJ,YADC;AAEP1G,UAAAA,IAAI,EAAE2G,YAFC;AAGP1G,UAAAA,WAAW,EAAE2G,mBAHN;AAIP1G,UAAAA,gBAAgB,EAAE2G,wBAJX;AAKPR,UAAAA,WAAW,EAAE;AACXlJ,YAAAA,IAAI,EAAEuI,gBADK;AAEX1F,YAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,YAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,YAAAA,gBAAgB,EAAE2F;AAJP,WALN;AAWPiB,UAAAA,UAAU,EAAEA,UAXL;AAYPC,UAAAA,iBAAiB,EAAEA;AAZZ,SAFO;AAgBhBW,QAAAA,aAAa,EAAE;AACbvU,UAAAA,KAAK,EAAEqU,UADM;AAEbG,UAAAA,IAAI,EAAEF;AAFO,SAhBC;AAoBhBG,QAAAA,KAAK,EAAE;AACLzK,UAAAA,IAAI,EAAE6J,UADD;AAELhH,UAAAA,IAAI,EAAEiH,UAFD;AAGLhH,UAAAA,WAAW,EAAEiH,iBAHR;AAILhH,UAAAA,gBAAgB,EAAEiH;AAJb,SApBS;AA0BhB7G,QAAAA,YAAY,EAAE8G,iBA1BE;AA2BhBS,QAAAA,cAAc,EAAE;AACd1K,UAAAA,IAAI,EAAEkK,cADQ;AAEdrH,UAAAA,IAAI,EAAEsH,cAFQ;AAGdrH,UAAAA,WAAW,EAAEsH;AAHC;AA3BA,OAAlB;AAiCD,KAzFD;AA2FA,WAAO;AACLhI,MAAAA,YAAY,EAAEgH,gBADT;AAEL9G,MAAAA,QAAQ,EAAE+G;AAFL,KAAP;AAID,GAjHD;AAkHD,CAtHD;;;;;;;ACNA;AACA;AACA;AAEA,IAAIhW,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,YAAW;AAC1B,MAAIsJ,IAAI,GAAG,IAAX;;AAEAA,EAAAA,IAAI,CAACkG,YAAL,GAAoB,UAAUlD,IAAV,EAAgB;AAElC,QAAIlL,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAI2J,YAAY,GAAGlD,IAAI,CAACH,OAAL,CAAa,cAAb,CAAnB;AACA/K,IAAAA,IAAI,CAACyF,UAAL,GAAkB2I,YAAY,CAACvJ,GAAb,CAAiB,YAAjB,EAA+BG,IAA/B,CAAoC,MAApC,CAAlB;AAEAoJ,IAAAA,YAAY,CAACjG,OAAb,GAAuBK,IAAvB,CAA4B,UAAS+F,KAAT,EAAgB;AAE1C9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;AAKA,UAAIkJ,IAAI,GAAG5P,IAAI,CAAC6B,eAAL,CAAqBoO,KAAK,CAAC1J,GAAN,CAAU,MAAV,EAAkBK,GAAlB,CAAsB,IAAtB,CAArB,CAAX;AAEAlF,MAAAA,IAAI,CAACqF,IAAL,CAAU;AACR6I,QAAAA,IAAI,EAAEA,IADE;AAERjD,QAAAA,IAAI,EAAEA,IAFE;AAGR6C,QAAAA,IAAI,EAAEA,IAHE;AAIRC,QAAAA,WAAW,EAAEA,WAJL;AAKRC,QAAAA,gBAAgB,EAAEA;AALV,OAAV;AAOD,KAjBD;AAmBA,WAAOhO,IAAP;AACD,GA3BD;AA4BD,CA/BD;;;;;;;ACNA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAAUmI,GAAV,EAAe;AAC9B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACuF,WAAL,GAAmB,UAAUvC,IAAV,EAAgB;AAEjC,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIqF,WAAW,GAAGvC,IAAI,CAACH,OAAL,CAAa,aAAb,CAAlB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,aAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBgI,WAAW,CAAC5I,GAAZ,CAAgB,YAAhB,EAA8BG,IAA9B,CAAmC,MAAnC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYT,WAAW,CAAC5I,GAAZ,CAAgB,MAAhB,EAAwBK,GAAxB,CAA4B,IAA5B,CAAZ;AAEAuI,IAAAA,WAAW,CAACtF,OAAZ,GAAsBK,IAAtB,CAA2B,UAAS+F,KAAT,EAAgB;AAEzC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAIwW,GAAG,GAAG/c,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAV;AAEA,UAAI0Q,cAAc,GAAGrH,KAAK,CAACxJ,QAAN,CAAe,eAAf,CAArB;AAEAN,MAAAA,EAAE,GAAGmR,cAAc,CAAC,CAAD,CAAnB,CAPyC,CAOjB;;AACxB,UAAIpH,UAAU,GAAG,IAAjB;AAAA,UAAuBC,QAAQ,GAAG,IAAlC;;AACA,UAAIhK,EAAJ,EAAQ;AACN+J,QAAAA,UAAU,GAAGpG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAAtB;AACAyJ,QAAAA,QAAQ,GAAGrG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,OAApB,CAAD,CAApB;AACD,OAZwC,CAczC;AACA;;;AACAP,MAAAA,EAAE,GAAGmR,cAAc,CAAC,CAAD,CAAnB;AACA,UAAIC,aAAa,GAAG,IAApB;AAAA,UAA0BC,qBAAqB,GAAG,IAAlD;AAAA,UAAwDC,oBAAoB,GAAG,IAA/E;;AACA,UAAItR,EAAE,IAAIA,EAAE,CAACO,IAAH,CAAQ,UAAR,MAAwB,SAAlC,EAA6C;AAC3C,YAAIgR,oBAAoB,GAAGvR,EAAE,CAACO,IAAH,CAAQ,sBAAR,CAA3B;;AACA,YAAIgR,oBAAoB,KAAK,MAA7B,EAAqC;AACnCH,UAAAA,aAAa,GAAE,WAAf;AACD,SAFD,MAEO,IAAIG,oBAAoB,KAAK,OAA7B,EAAsC;AAC3CH,UAAAA,aAAa,GAAG,UAAhB;AACD;;AAEDpR,QAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,QAAP,CAAL;AACAiR,QAAAA,qBAAqB,GAAGrR,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAxB;AACA+Q,QAAAA,oBAAoB,GAAGtR,EAAE,CAACO,IAAH,CAAQ,MAAR,CAAvB;AACD;;AAEDP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,qBAAV,EAAiCA,GAAjC,CAAqC,MAArC,CAAL;AACA,UAAI2P,YAAY,GAAG/P,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAnB;AAAA,UACIyP,YAAY,GAAGhQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADnB;AAAA,UAEI0P,mBAAmB,GAAGjQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF1B;AAIA,UAAIiR,qBAAqB,GAAG,IAA5B;AACAxR,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,qBAAV,EAAiCA,GAAjC,CAAqC,cAArC,CAAL;;AACA,UAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB8Q,QAAAA,qBAAqB,GAAG3X,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACS,GAAH,EAArB,CAAxB;AACD,OAxCwC,CAyCzC;;;AACA,UAAI,CAACsP,YAAD,IAAiByB,qBAArB,EAA4C;AAC1CzB,QAAAA,YAAY,GAAGyB,qBAAf;AACD;;AAEDxR,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,qBAAV,EAAiCA,GAAjC,CAAqC,aAArC,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACIyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADvB;AAAA,UAEI0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF9B;AAAA,UAGI2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHnC;AAKAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,CAAL;AACA,UAAIyQ,UAAU,GAAG7Q,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAAA,UACIuQ,SAAS,GAAG9Q,EAAE,CAACO,IAAH,CAAQ,MAAR,CADhB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,CAAL;AACA,UAAIqR,mBAAmB,GAAGzR,EAAE,CAACO,IAAH,CAAQ,OAAR,CAA1B;AAAA,UACImR,kBAAkB,GAAG1R,EAAE,CAACO,IAAH,CAAQ,MAAR,CADzB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,cAAV,EAA0BA,GAA1B,CAA8B,OAA9B,CAAL;AACA,UAAIuR,iBAAiB,GAAG3R,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAxB;AAAA,UACIqR,iBAAiB,GAAG5R,EAAE,CAACO,IAAH,CAAQ,MAAR,CADxB;AAAA,UAEIsR,wBAAwB,GAAG7R,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF/B;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,iCAAf,EAAkD+E,GAAlD,CAAsD,OAAtD,CAAL;AACA,UAAI0R,WAAW,GAAG9R,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAlB;AAAA,UACIwR,WAAW,GAAG/R,EAAE,CAACO,IAAH,CAAQ,MAAR,CADlB;AAAA,UAEIyR,kBAAkB,GAAGhS,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFzB;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,CAAL;AACA,UAAIiQ,UAAU,GAAGrQ,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAjB;AAAA,UACI+P,UAAU,GAAGtQ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADjB;AAAA,UAEIgQ,iBAAiB,GAAGvQ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFxB;AAAA,UAGIiQ,sBAAsB,GAAGxQ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH7B,CAvEyC,CA4EzC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,aAAV,EAAyBA,GAAzB,CAA6B,eAA7B,CAAL;AACA,UAAI6R,YAAY,GAAGjS,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAAnB;AAEAT,MAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,MAAP,CAAL,CAhFyC,CAiFzC;;AACA6R,MAAAA,YAAY,GAAGjS,EAAE,CAACO,IAAH,CAAQ,aAAR,KAA0B0R,YAAzC;AACA,UAAIC,YAAY,GAAGlS,EAAE,CAACO,IAAH,CAAQ,MAAR,CAAnB;AAAA,UACI4R,mBAAmB,GAAGnS,EAAE,CAACO,IAAH,CAAQ,YAAR,CAD1B;AAAA,UAEI6R,wBAAwB,GAAGpS,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAF/B;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,wBAAV,CAAL;AACA,UAAIiS,mBAAmB,GAAGrS,EAAE,CAACO,IAAH,CAAQ,aAAR,CAA1B;AAAA,UACI+R,mBAAmB,GAAGtS,EAAE,CAACO,IAAH,CAAQ,MAAR,CAD1B;AAAA,UAEIgS,0BAA0B,GAAGvS,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFjC;AAAA,UAGIiS,+BAA+B,GAAGxS,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHtC,CAxFyC,CA6FzC;;AACAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,CAAL;AACA,UAAIqS,uBAAuB,GAAGzS,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAA9B;AAAA,UACIiS,iBAAiB,GAAG,IADxB;AAGAnX,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBkK,QAAAA,UAAU,EAAE;AACVC,UAAAA,KAAK,EAAEhB,UADG;AAEViB,UAAAA,GAAG,EAAEhB;AAFK,SADI;AAKhBP,QAAAA,IAAI,EAAEmN,GALU;AAMhB9G,QAAAA,OAAO,EAAE;AACPtJ,UAAAA,IAAI,EAAEuJ,YADC;AAEP1G,UAAAA,IAAI,EAAE2G,YAFC;AAGP1G,UAAAA,WAAW,EAAE2G,mBAHN;AAIPxG,UAAAA,IAAI,EAAE+H,qBAJC;AAKP9B,UAAAA,WAAW,EAAE;AACXlJ,YAAAA,IAAI,EAAEuI,gBADK;AAEX1F,YAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,YAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,YAAAA,gBAAgB,EAAE2F;AAJP;AALN,SANO;AAkBhB6B,QAAAA,aAAa,EAAE;AACbvU,UAAAA,KAAK,EAAEqU,UADM;AAEbG,UAAAA,IAAI,EAAEF;AAFO,SAlBC;AAsBhB6B,QAAAA,aAAa,EAAE;AACbnW,UAAAA,KAAK,EAAEiV,mBADM;AAEbT,UAAAA,IAAI,EAAEU;AAFO,SAtBC;AA0BhBkB,QAAAA,YAAY,EAAE;AACZpM,UAAAA,IAAI,EAAEmL,iBADM;AAEZtI,UAAAA,IAAI,EAAEuI,iBAFM;AAGZtI,UAAAA,WAAW,EAAEuI;AAHD,SA1BE;AA+BhBgB,QAAAA,MAAM,EAAE;AACNrM,UAAAA,IAAI,EAAEsL,WADA;AAENzI,UAAAA,IAAI,EAAE0I,WAFA;AAGNzI,UAAAA,WAAW,EAAE0I;AAHP,SA/BQ;AAoChBf,QAAAA,KAAK,EAAE;AACLzK,UAAAA,IAAI,EAAE6J,UADD;AAELhH,UAAAA,IAAI,EAAEiH,UAFD;AAGLhH,UAAAA,WAAW,EAAEiH,iBAHR;AAILhH,UAAAA,gBAAgB,EAAEiH;AAJb,SApCS;AA0ChBsC,QAAAA,QAAQ,EAAE;AACRxY,UAAAA,IAAI,EAAE8W,aADE;AAER2B,UAAAA,YAAY,EAAE1B,qBAFN;AAGR2B,UAAAA,WAAW,EAAE1B;AAHL,SA1CM;AA+ChB2B,QAAAA,OAAO,EAAE;AACPzM,UAAAA,IAAI,EAAEyL,YADC;AAEP5I,UAAAA,IAAI,EAAE6I,YAFC;AAGP5I,UAAAA,WAAW,EAAE6I,mBAHN;AAIP5I,UAAAA,gBAAgB,EAAE6I;AAJX,SA/CO;AAqDhBc,QAAAA,cAAc,EAAE;AACd1M,UAAAA,IAAI,EAAE6L,mBADQ;AAEdhJ,UAAAA,IAAI,EAAEiJ,mBAFQ;AAGdhJ,UAAAA,WAAW,EAAEiJ,0BAHC;AAIdhJ,UAAAA,gBAAgB,EAAEiJ;AAJJ,SArDA;AA2DhBW,QAAAA,UAAU,EAAE;AACVnG,UAAAA,YAAY,EAAEyF,uBADJ;AAEVW,UAAAA,MAAM,EAAEV;AAFE;AA3DI,OAAlB;AAgED,KAlKD;AAoKA,WAAOnX,IAAP;AACD,GAhLD;AAiLD,CArLD;;;;;;;ACNA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACwF,QAAL,GAAgB,UAAUxC,IAAV,EAAgB;AAE9B,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AAEA,QAAIoF,QAAQ,GAAGxC,IAAI,CAACH,OAAL,CAAa,UAAb,CAAf;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,UAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBiI,QAAQ,CAAC7I,GAAT,CAAa,YAAb,EAA2BG,IAA3B,CAAgC,MAAhC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYR,QAAQ,CAAC7I,GAAT,CAAa,MAAb,EAAqBK,GAArB,CAAyB,IAAzB,CAAZ;AAEAwI,IAAAA,QAAQ,CAACvF,OAAT,GAAmBK,IAAnB,CAAwB,UAAS+F,KAAT,EAAgB;AAEtC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAI2J,UAAU,GAAGpG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,KAAP,EAAcG,IAAd,CAAmB,OAAnB,CAAD,CAA1B;AAAA,UACIyJ,QAAQ,GAAGrG,SAAS,CAAC3D,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeG,IAAf,CAAoB,OAApB,CAAD,CADxB;AAGAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,OAArD,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,UAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;AAKAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,EAAiD+E,GAAjD,CAAqD,aAArD,CAAL;AACA,UAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,UACEyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADrB;AAAA,UAEE0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF5B;AAAA,UAGE2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHjC;AAKAP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,gCAAf,CAAL;AACA,UAAIwP,MAAM,GAAG7K,EAAE,CAACI,GAAH,CAAO,OAAP,EAAgBG,IAAhB,CAAqB,aAArB,CAAb;AAEA,UAAI8S,GAAG,GAAG,IAAV;AACArT,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,iCAAf,CAAL;;AACA,UAAI,CAAC2E,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjB2S,QAAAA,GAAG,GAAGC,UAAU,CAACtT,EAAE,CAACI,GAAH,CAAO,OAAP,EAAgBG,IAAhB,CAAqB,OAArB,CAAD,CAAhB;AACD;;AAEDP,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,iCAAf,CAAL;AACA,UAAIkY,OAAO,GAAG1Z,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB,CAAd;AAEAlF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBkK,QAAAA,UAAU,EAAE;AACVC,UAAAA,KAAK,EAAEhB,UADG;AAEViB,UAAAA,GAAG,EAAEhB;AAFK,SADI;AAKhBxD,QAAAA,IAAI,EAAEA,IALU;AAMhBqE,QAAAA,MAAM,EAAEA,MANQ;AAOhBwI,QAAAA,GAAG,EAAEA,GAPW;AAQhBhK,QAAAA,IAAI,EAAEA,IARU;AAShBC,QAAAA,WAAW,EAAEA,WATG;AAUhBC,QAAAA,gBAAgB,EAAEA,gBAVF;AAWhBmG,QAAAA,WAAW,EAAE;AACXlJ,UAAAA,IAAI,EAAEuI,gBADK;AAEX1F,UAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,UAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,UAAAA,gBAAgB,EAAE2F;AAJP,SAXG;AAiBhBqE,QAAAA,OAAO,EAAEA;AAjBO,OAAlB;AAmBD,KAjDD;AAmDA,WAAOhY,IAAP;AACD,GAlED;AAmED,CAvED;;;;;;;ACNA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACyF,UAAL,GAAkB,UAAUzC,IAAV,EAAgB;AAEhC,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAIqF,UAAU,GAAGzC,IAAI,CAACH,OAAL,CAAa,YAAb,CAAjB;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,YAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBkI,UAAU,CAAC9I,GAAX,CAAe,YAAf,EAA6BG,IAA7B,CAAkC,MAAlC,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYP,UAAU,CAAC9I,GAAX,CAAe,MAAf,EAAuBK,GAAvB,CAA2B,IAA3B,CAAZ;AAEAyI,IAAAA,UAAU,CAACxF,OAAX,GAAqBK,IAArB,CAA0B,UAAS+F,KAAT,EAAgB;AAExC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAIwE,IAAI,GAAGjB,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAApB;AAEAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,UACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,UAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;;AAIA,UAAI,CAACiG,IAAL,EAAW;AACTA,QAAAA,IAAI,GAAG3M,IAAI,CAAC6B,eAAL,CAAqBoO,KAAK,CAAC1J,GAAN,CAAU,cAAV,EAA0BK,GAA1B,EAArB,CAAP;AACD,OAZuC,CAcxC;;;AACAT,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,UAAV,EAAsBA,GAAtB,CAA0B,MAA1B,CAAL;AACA,UAAIoT,aAAa,GAAGxT,EAAE,CAACO,IAAH,CAAQ,aAAR,CAApB;AAAA,UACIkT,aAAa,GAAGzT,EAAE,CAACO,IAAH,CAAQ,MAAR,CADpB;AAAA,UAEImT,oBAAoB,GAAG1T,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF3B;AAIAP,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,WAAV,EAAuBA,GAAvB,CAA2B,MAA3B,CAAL;AACA,UAAI4M,YAAY,GAAGhN,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAAnB;AAAA,UACIiM,KAAK,GAAG1M,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CADZ;AAGA,UAAIoT,cAAc,GAAG9P,YAAY,CAAC7D,EAAD,CAAjC;AACA2T,MAAAA,cAAc,CAAC3G,YAAf,GAA8BA,YAA9B;AACA2G,MAAAA,cAAc,CAACjH,KAAf,GAAuBA,KAAvB,CA1BwC,CA4BxC;;AACA1M,MAAAA,EAAE,GAAG8J,KAAK,CAACzO,QAAN,CAAe,iCAAf,EAAkD+E,GAAlD,CAAsD,MAAtD,CAAL;AACA,UAAIwT,WAAW,GAAG5T,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAlB;AAAA,UACIsT,WAAW,GAAG7T,EAAE,CAACO,IAAH,CAAQ,MAAR,CADlB;AAAA,UAEIuT,kBAAkB,GAAG9T,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFzB;AAIAhF,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEA,IADU;AAEhB4B,QAAAA,IAAI,EAAEA,IAFU;AAGhB6C,QAAAA,IAAI,EAAEA,IAHU;AAIhBC,QAAAA,WAAW,EAAEA,WAJG;AAKhByK,QAAAA,QAAQ,EAAE;AACRvN,UAAAA,IAAI,EAAEgN,aADE;AAERnK,UAAAA,IAAI,EAAEoK,aAFE;AAGRnK,UAAAA,WAAW,EAAEoK;AAHL,SALM;AAUhB/D,QAAAA,SAAS,EAAEgE,cAVK;AAWhBK,QAAAA,MAAM,EAAE;AACNxN,UAAAA,IAAI,EAAEoN,WADA;AAENvK,UAAAA,IAAI,EAAEwK,WAFA;AAGNvK,UAAAA,WAAW,EAAEwK;AAHP;AAXQ,OAAlB;AAiBD,KAnDD;AAqDA,WAAOvY,IAAP;AACD,GAnED;AAoED,CAxED;;;;;;;ACNA;AACA;AACA;AAEA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACsF,OAAL,GAAe,UAAUtC,IAAV,EAAgB;AAE7B,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAIkF,OAAO,GAAGtC,IAAI,CAACH,OAAL,CAAa,SAAb,CAAd;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,SAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkB+H,OAAO,CAAC3I,GAAR,CAAY,YAAZ,EAA0BG,IAA1B,CAA+B,MAA/B,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYV,OAAO,CAAC3I,GAAR,CAAY,MAAZ,EAAoBK,GAApB,CAAwB,IAAxB,CAAZ;AAEAsI,IAAAA,OAAO,CAACrF,OAAR,GAAkBK,IAAlB,CAAuB,UAAS+F,KAAT,EAAgB;AAErC;AACA9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,MAAV,CAAL;AACA,UAAI8T,UAAU,GAAGlU,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAjB;AAAA,UACI4T,UAAU,GAAGnU,EAAE,CAACO,IAAH,CAAQ,MAAR,CADjB;AAAA,UAEI6T,iBAAiB,GAAGpU,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFxB;AAAA,UAGI8T,sBAAsB,GAAGrU,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAH7B;AAKA,UAAI+T,WAAJ;AACA,UAAIC,KAAK,GAAGzK,KAAK,CAACxJ,QAAN,CAAe,aAAf,CAAZ;AACA,UAAIkU,UAAU,GAAG,EAAjB;;AAEA,WAAK,IAAI7V,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG4V,KAAK,CAAC3V,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;AACrC2V,QAAAA,WAAW,GAAGC,KAAK,CAAC5V,CAAD,CAAnB;AAEA,YAAIiG,IAAI,GAAGjB,SAAS,CAAC2Q,WAAW,CAAClU,GAAZ,CAAgB,eAAhB,EAAiCG,IAAjC,CAAsC,OAAtC,CAAD,CAApB;AAEAP,QAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,MAAhB,CAAL;AACA,YAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,YACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,YAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,YAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;;AAKA,YAAI,CAACiG,IAAL,EAAW;AACTA,UAAAA,IAAI,GAAG3M,IAAI,CAAC6B,eAAL,CAAqB4Y,WAAW,CAAClU,GAAZ,CAAgB,MAAhB,EAAwBK,GAAxB,EAArB,CAAP;AACD;;AAEDT,QAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,aAAhB,CAAL;AACA,YAAI2O,gBAAgB,GAAG/O,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAvB;AAAA,YACEyO,gBAAgB,GAAGhP,EAAE,CAACO,IAAH,CAAQ,MAAR,CADrB;AAAA,YAEE0O,uBAAuB,GAAGjP,EAAE,CAACO,IAAH,CAAQ,YAAR,CAF5B;AAAA,YAGE2O,4BAA4B,GAAGlP,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHjC;AAKAP,QAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,OAAhB,CAAL;AACA,YAAI5D,KAAK,GAAGwD,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAZ;AAAA,YACIyQ,IAAI,GAAGhR,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX,CAtBqC,CAwBrC;AACA;;AACA,YAAI/D,KAAK,IAAI,CAACG,KAAK,CAAC2W,UAAU,CAAC9W,KAAD,CAAX,CAAnB,EAAwC;AACtCA,UAAAA,KAAK,GAAG8W,UAAU,CAAC9W,KAAD,CAAlB;AACD;;AACD,YAAI,CAACA,KAAL,EAAY;AACVA,UAAAA,KAAK,GAAGwD,EAAE,CAACS,GAAH,EAAR,CADU,CACQ;AACnB;;AAEDT,QAAAA,EAAE,GAAGsU,WAAW,CAAClU,GAAZ,CAAgB,gBAAhB,CAAL;AACA,YAAIqU,oBAAoB,GAAG5a,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,MAA/B,EAAuCK,GAAvC,EAArB,CAA3B;AAAA,YACIiU,wBAAwB,GAAG1U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,KAA/B,EAAsCG,IAAtC,CAA2C,MAA3C,CAD/B;AAAA,YAEIoU,yBAAyB,GAAG3U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,KAA/B,EAAsCG,IAAtC,CAA2C,OAA3C,CAFhC;AAAA,YAGIqU,yBAAyB,GAAG5U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,MAA/B,EAAuCG,IAAvC,CAA4C,MAA5C,CAHhC;AAAA,YAIIsU,0BAA0B,GAAG7U,EAAE,CAACI,GAAH,CAAO,kBAAP,EAA2BA,GAA3B,CAA+B,MAA/B,EAAuCG,IAAvC,CAA4C,OAA5C,CAJjC;AAMAiU,QAAAA,UAAU,CAAC5T,IAAX,CAAgB;AACdgE,UAAAA,IAAI,EAAEA,IADQ;AAEd4B,UAAAA,IAAI,EAAEA,IAFQ;AAGdhK,UAAAA,KAAK,EAAEA,KAHO;AAIdwU,UAAAA,IAAI,EAAEA,IAJQ;AAKd3H,UAAAA,IAAI,EAAEA,IALQ;AAMdC,UAAAA,WAAW,EAAEA,WANC;AAOdC,UAAAA,gBAAgB,EAAEA,gBAPJ;AAQdmG,UAAAA,WAAW,EAAE;AACXlJ,YAAAA,IAAI,EAAEuI,gBADK;AAEX1F,YAAAA,IAAI,EAAE2F,gBAFK;AAGX1F,YAAAA,WAAW,EAAE2F,uBAHF;AAIX1F,YAAAA,gBAAgB,EAAE2F;AAJP,WARC;AAcd4F,UAAAA,eAAe,EAAE;AACfrL,YAAAA,IAAI,EAAEgL,oBADS;AAEfM,YAAAA,QAAQ,EAAEL,wBAFK;AAGfM,YAAAA,SAAS,EAAEL,yBAHI;AAIfM,YAAAA,SAAS,EAAEL,yBAJI;AAKfM,YAAAA,UAAU,EAAEL;AALG;AAdH,SAAhB;AAsBD;;AAEDtZ,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChB4F,QAAAA,IAAI,EAAE0N,UADU;AAEhB7K,QAAAA,IAAI,EAAE8K,UAFU;AAGhB7K,QAAAA,WAAW,EAAE8K,iBAHG;AAIhB7K,QAAAA,gBAAgB,EAAE8K,sBAJF;AAKhBE,QAAAA,KAAK,EAAEC;AALS,OAAlB;AAOD,KApFD;AAsFA,WAAOjZ,IAAP;AACD,GApGD;AAqGD,CAzGD;;;;;;;ACNA;AACA;AACA;AAEArB,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAAC2F,cAAL,GAAsB,UAAU3C,IAAV,EAAgB;AAEpC,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAItI,IAAJ,EAAUyE,EAAV;AAEA,QAAIwG,IAAI,GAAG,IAAX;AAAA,QACI6C,IAAI,GAAG,IADX;AAAA,QAEIC,WAAW,GAAG,IAFlB;AAAA,QAGIC,gBAAgB,GAAG,IAHvB;AAAA,QAII4L,UAAU,GAAG,IAJjB,CAPoC,CAapC;AACA;AACA;AACA;;AACA,QAAI0B,cAAc,GAAGpQ,IAAI,CAACH,OAAL,CAAa,gBAAb,CAArB;AACA,QAAI5C,OAAO,GAAGmT,cAAc,CAACnT,OAAf,EAAd;;AACA,SAAK,IAAI/E,CAAC,GAAC,CAAX,EAAcA,CAAC,GAAG+E,OAAO,CAAC9E,MAA1B,EAAkCD,CAAC,EAAnC,EAAuC;AACrC,UAAImL,KAAK,GAAGpG,OAAO,CAAC/E,CAAD,CAAnB;AAEA,UAAIyK,cAAc,GAAGU,KAAK,CAACzO,QAAN,CAAe,iCAAf,CAArB;;AACA,UAAI+N,cAAc,CAAC1I,OAAf,EAAJ,EAA8B;AAC5B0I,QAAAA,cAAc,GAAGU,KAAK,CAACzO,QAAN,CAAe,8BAAf,CAAjB;AACD;;AACD,UAAI+N,cAAc,CAAC1I,OAAf,EAAJ,EAA8B;AAC5B;AACD;;AAEDV,MAAAA,EAAE,GAAGoJ,cAAc,CAAChJ,GAAf,CAAmB,eAAnB,CAAL;AACA+U,MAAAA,UAAU,GAAGxR,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAAtB;AAEAP,MAAAA,EAAE,GAAGoJ,cAAc,CAAChJ,GAAf,CAAmB,OAAnB,CAAL;AACAoG,MAAAA,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAP;AACA8I,MAAAA,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CAAP;AACA+I,MAAAA,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAAd;AACAgJ,MAAAA,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAAnB;;AAEA,UAAIiG,IAAJ,EAAU;AACR;AACD;AACF;;AAEDjL,IAAAA,IAAI,GAAG;AACLqJ,MAAAA,IAAI,EAAEuQ,UADD;AAEL3O,MAAAA,IAAI,EAAEA,IAFD;AAGL6C,MAAAA,IAAI,EAAEA,IAHD;AAILC,MAAAA,WAAW,EAAEA,WAJR;AAKLC,MAAAA,gBAAgB,EAAEA;AALb,KAAP;AAQA,WAAOhO,IAAP;AACD,GArDD;AAsDD,CA1DD;;;;;;;ACJA;AACA;AACA;AAEArB,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAAC0F,MAAL,GAAc,UAAU1C,IAAV,EAAgB;AAE5B,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAIsF,MAAM,GAAG1C,IAAI,CAACH,OAAL,CAAa,QAAb,CAAb;AAEA,QAAI/K,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AACAzE,IAAAA,IAAI,CAACmI,OAAL,GAAe,EAAf;AACAnI,IAAAA,IAAI,CAACsO,WAAL,GAAmB,QAAnB;AACAtO,IAAAA,IAAI,CAACyF,UAAL,GAAkBmI,MAAM,CAAC/I,GAAP,CAAW,YAAX,EAAyBG,IAAzB,CAA8B,MAA9B,CAAlB;AACAhF,IAAAA,IAAI,CAACkO,IAAL,GAAYN,MAAM,CAAC/I,GAAP,CAAW,MAAX,EAAmBK,GAAnB,CAAuB,IAAvB,CAAZ;AAEA0I,IAAAA,MAAM,CAACzF,OAAP,GAAiBK,IAAjB,CAAsB,UAAS+F,KAAT,EAAgB;AAEpC9J,MAAAA,EAAE,GAAG8J,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAL;AACA,UAAI+U,UAAU,GAAGxR,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAA1B;AAEA,UAAI9B,MAAJ;AACA,UAAIsK,OAAO,GAAGe,KAAK,CAACxJ,QAAN,CAAe,WAAf,CAAd;AACA,UAAI8U,YAAY,GAAG,EAAnB;;AAEA,WAAK,IAAIzW,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAGoK,OAAO,CAACnK,MAA5B,EAAoCD,CAAC,EAArC,EAAyC;AACvCF,QAAAA,MAAM,GAAGsK,OAAO,CAACpK,CAAD,CAAhB;AAEAqB,QAAAA,EAAE,GAAGvB,MAAM,CAAC2B,GAAP,CAAW,MAAX,CAAL;AACA,YAAIoG,IAAI,GAAGxG,EAAE,CAACO,IAAH,CAAQ,aAAR,CAAX;AAAA,YACI8I,IAAI,GAAGrJ,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAAA,YAEI+I,WAAW,GAAGtJ,EAAE,CAACO,IAAH,CAAQ,YAAR,CAFlB;AAAA,YAGIgJ,gBAAgB,GAAGvJ,EAAE,CAACO,IAAH,CAAQ,gBAAR,CAHvB;AAKAP,QAAAA,EAAE,GAAGvB,MAAM,CAAC2B,GAAP,CAAW,OAAX,CAAL;AACA,YAAI5D,KAAK,GAAG8W,UAAU,CAACtT,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAAtB;AAAA,YACIyQ,IAAI,GAAGhR,EAAE,CAACO,IAAH,CAAQ,MAAR,CADX;AAGA6U,QAAAA,YAAY,CAACxU,IAAb,CAAkB;AAChB4F,UAAAA,IAAI,EAAEA,IADU;AAEhB6C,UAAAA,IAAI,EAAEA,IAFU;AAGhBC,UAAAA,WAAW,EAAEA,WAHG;AAIhBC,UAAAA,gBAAgB,EAAEA,gBAJF;AAKhB/M,UAAAA,KAAK,EAAEA,KALS;AAMhBwU,UAAAA,IAAI,EAAEA;AANU,SAAlB;AAQD;;AAEDzV,MAAAA,IAAI,CAACmI,OAAL,CAAa9C,IAAb,CAAkB;AAChBgE,QAAAA,IAAI,EAAEuQ,UADU;AAEhBpM,QAAAA,OAAO,EAAEqM;AAFO,OAAlB;AAID,KApCD;AAsCA,WAAO7Z,IAAP;AACD,GApDD;AAqDD,CAzDD;;;;;;;ACJA;AACA;AACA;AAEA,IAAIsM,gBAAgB,GAAG/N,mBAAO,CAAC,GAAD,CAA9B;;AACA,IAAID,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEA,IAAIuN,cAAc,GAAGvN,mBAAO,CAAC,GAAD,CAA5B;;AACA,IAAIsN,kBAAkB,GAAGtN,mBAAO,CAAC,GAAD,CAAhC;;AACA,IAAIwb,oBAAoB,GAAGxb,mBAAO,CAAC,GAAD,CAAlC;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;AACAmB,EAAAA,IAAI,CAAC8R,cAAL,GAAsB,IAAIlO,cAAJ,CAAmB5D,IAAI,CAACnB,GAAxB,CAAtB;AACAmB,EAAAA,IAAI,CAACsE,kBAAL,GAA0B,IAAIX,kBAAJ,CAAuB3D,IAAI,CAACnB,GAA5B,CAA1B;AACAmB,EAAAA,IAAI,CAAC+R,oBAAL,GAA4B,IAAIF,oBAAJ,CAAyB7R,IAAI,CAACnB,GAA9B,CAA5B;;AAEAmB,EAAAA,IAAI,CAACzI,GAAL,GAAW,UAAUyL,IAAV,EAAgB;AACvB,QAAIlL,IAAI,GAAG,EAAX;AAEAA,IAAAA,IAAI,CAAC4H,QAAL,GAA6BM,IAAI,CAAC8R,cAAL,CAAoBpS,QAApB,CAA6BsD,IAA7B,CAA7B;AACAlL,IAAAA,IAAI,CAACiN,YAAL,GAA6B/E,IAAI,CAACsE,kBAAL,CAAwBS,YAAxB,CAAqC/B,IAArC,CAA7B;AACAlL,IAAAA,IAAI,CAACka,wBAAL,GAAiChS,IAAI,CAAC+R,oBAAL,CAA0BC,wBAA1B,CAAmDhP,IAAnD,CAAjC;AACAlL,IAAAA,IAAI,CAACI,IAAL,GAA6B9B,IAAI,CAAC8B,IAAlC,CANuB,CAQvB;;AACAkM,IAAAA,gBAAgB,CAACpB,IAAD,EAAOlL,IAAP,CAAhB;AAEA,WAAOA,IAAP;AACD,GAZH;AAaD,CApBD;;;;;;;ACXA;AACA;AACA;AACA,IAAI1B,IAAI,GAAGC,mBAAO,CAAC,CAAD,CAAlB;;AAEAI,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC7B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACN,QAAL,GAAgB,UAAUsD,IAAV,EAAgB;AAC9B,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B;AACA,QAAItI,IAAI,GAAG,EAAX;AAAA,QAAeyE,EAAf;AAEA,QAAIsC,GAAG,GAAGmE,IAAI,CAACH,OAAL,CAAa,UAAb,CAAV;AACA,QAAI1B,IAAI,GAAGjB,SAAS,CAACrB,GAAG,CAAClC,GAAJ,CAAQ,eAAR,EAAyBG,IAAzB,CAA8B,OAA9B,CAAD,CAApB;AACA,QAAIwN,KAAK,GAAGlU,IAAI,CAAC6B,eAAL,CAAqB4G,GAAG,CAAClC,GAAJ,CAAQ,OAAR,EAAiBK,GAAjB,EAArB,CAAZ,CAR8B,CAU9B;;AACA,QAAIwM,SAAS,GAAI3K,GAAG,CAAChC,QAAJ,CAAa,YAAb,CAAjB;AAEA,QAAI4M,YAAY,GAAGD,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAnB;AACA,QAAI4M,cAAJ;AACA,QAAGF,SAAS,CAACrO,MAAV,GAAkB,CAArB,EACEuO,cAAc,GAAGF,SAAS,CAAC,CAAD,CAAT,CAAa1M,IAAb,CAAkB,MAAlB,CAAjB,CADF,KAGE4M,cAAc,GAAGD,YAAjB;AAEF,QAAIE,KAAK,GAAG9K,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,MAArB,CAAZ;AACA,QAAIS,UAAU,GAAGsB,GAAG,CAAClC,GAAJ,CAAQ,YAAR,EAAsBG,IAAtB,CAA2B,MAA3B,CAAjB;AACA,QAAIsJ,WAAW,GAAGvH,GAAG,CAAClC,GAAJ,CAAQ,MAAR,EAAgBG,IAAhB,CAAqB,aAArB,CAAlB;AAEA,QAAI8M,MAAM,GAAG/K,GAAG,CAAClC,GAAJ,CAAQ,YAAR,CAAb;AACA,QAAIkN,WAAW,GAAGD,MAAM,CAACrN,EAAP,CAAU2B,UAA5B;AAEA,QAAI4L,QAAQ,GAAG,YAAf;AACA,QAAIC,UAAU,GAAG;AACflT,MAAAA,IAAI,EAAE,EADS;AAEfmT,MAAAA,SAAS,EAAE,EAFI;AAGfC,MAAAA,cAAc,EAAE,EAHD;AAIfC,MAAAA,OAAO,EAAE,EAJM;AAKfC,MAAAA,SAAS,EAAE;AALI,KAAjB;;AAOA,QAAGN,WAAW,IAAIA,WAAW,CAAC1O,MAAZ,GAAqB,CAAvC,EAA0C;AACxC2O,MAAAA,QAAQ,GAAG,cAAX;AACA,UAAI9D,IAAI,GAAG4D,MAAM,CAACjN,GAAP,CAAW,MAAX,CAAX;AACA,UAAIqN,SAAS,GAAG,EAAhB;AACA,UAAIC,cAAc,GAAG,EAArB;AACA,UAAIC,OAAO,GAAG,EAAd;AACA,UAAIC,SAAS,GAAG,EAAhB;AACA,UAAItT,IAAI,GAAG,EAAX,CAPwC,CASxC;;AACA,UAAGmP,IAAI,IAAIA,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAX,EAAmC;AACjCkN,QAAAA,SAAS,GAAGhE,IAAI,CAAClJ,IAAL,CAAU,WAAV,CAAZ;AACAmN,QAAAA,cAAc,GAAGjE,IAAI,CAAClJ,IAAL,CAAU,gBAAV,CAAjB;AACAoN,QAAAA,OAAO,GAAGlE,IAAI,CAAChJ,GAAL,EAAV;AACAnG,QAAAA,IAAI,GAAG,UAAP;AACD;;AAED,UAAGmP,IAAI,IAAI,CAACgE,SAAZ,EAAuB;AACrBG,QAAAA,SAAS,GAAGnE,IAAI,CAACrJ,GAAL,CAAS,WAAT,EAAsBG,IAAtB,CAA2B,OAA3B,CAAZ;AACAjG,QAAAA,IAAI,GAAG,WAAP;AACD;;AACDkT,MAAAA,UAAU,GAAG;AACXlT,QAAAA,IAAI,EAAEA,IADK;AAEXmT,QAAAA,SAAS,EAAEA,SAFA;AAGXC,QAAAA,cAAc,EAAEA,cAHL;AAIXC,QAAAA,OAAO,EAAEA,OAJE;AAKXC,QAAAA,SAAS,EAAEA;AALA,OAAb;AAOD;;AAED,QAAIC,OAAO,GAAG;AACZvT,MAAAA,IAAI,EAAE,QADM;AAEZwT,MAAAA,cAAc,EAAEZ,YAFJ;AAGZlM,MAAAA,UAAU,EAAEmM,cAHA;AAIZtD,MAAAA,WAAW,EAAEA,WAJD;AAKZuD,MAAAA,KAAK,EAAEA,KALK;AAMZG,MAAAA,QAAQ,EAAEA,QANE;AAOZC,MAAAA,UAAU,EAAEA;AAPA,KAAd;AAUA,QAAIQ,MAAM,GAAG1L,GAAG,CAAClC,GAAJ,CAAQ,QAAR,CAAb;AACAJ,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,gBAAX,EAA6BA,GAA7B,CAAiC,MAAjC,CAAL;AACA,QAAI6N,SAAS,GAAGrK,SAAS,CAAC5D,EAAD,CAAzB;AAEAA,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,MAAX,CAAL;AACA,QAAI8N,YAAY,GAAGrK,YAAY,CAAC7D,EAAD,CAA/B;AAEAA,IAAAA,EAAE,GAAGgO,MAAM,CAAC5N,GAAP,CAAW,SAAX,CAAL;AACA,QAAI+N,UAAU,GAAGnO,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAjB;AAEA,QAAI6N,qBAAqB,GAAG,EAA5B;AACA,QAAIC,UAAU,GAAG/L,GAAG,CAAClC,GAAJ,CAAQ,iBAAR,EAA2BE,QAA3B,CAAoC,WAApC,CAAjB;;AACA,SAAK,IAAI3B,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG0P,UAAU,CAACzP,MAA/B,EAAuCD,CAAC,EAAxC,EAA4C;AAC1CqB,MAAAA,EAAE,GAAGqO,UAAU,CAAC1P,CAAD,CAAf;AACA,UAAI2P,mBAAmB,GAAG1K,SAAS,CAAC5D,EAAD,CAAnC;AACA,UAAIuO,eAAe,GAAGvO,EAAE,CAACI,GAAH,CAAO,SAAP,EAAkBG,IAAlB,CAAuB,OAAvB,CAAtB;AACA,UAAIiO,cAAc,GAAG3K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAAjC;AACAgO,MAAAA,qBAAqB,CAACxN,IAAtB,CAA2B;AACzB4F,QAAAA,IAAI,EAAE8H,mBADmB;AAEzB5B,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAE6C;AADD,SAFkB;AAKzB9B,QAAAA,OAAO,EAAE+B;AALgB,OAA3B;AAOD;;AAEDxO,IAAAA,EAAE,GAAGsC,GAAG,CAAClC,GAAJ,CAAQ,uBAAR,EAAiCA,GAAjC,CAAqC,UAArC,CAAL;AACA,QAAIqO,aAAa,GAAG5U,IAAI,CAAC6B,eAAL,CAAqBsE,EAAE,CAACI,GAAH,CAAO,MAAP,EAAeK,GAAf,EAArB,CAApB;AACA,QAAIiO,kBAAkB,GAAG7K,YAAY,CAAC7D,EAAE,CAACI,GAAH,CAAO,MAAP,CAAD,CAArC;AAEA,QAAIuO,cAAc,GAAG,IAArB;AACA3O,IAAAA,EAAE,GAAGA,EAAE,CAACI,GAAH,CAAO,eAAP,CAAL;;AACA,QAAI,CAACJ,EAAE,CAACU,OAAH,EAAL,EAAmB;AACjBiO,MAAAA,cAAc,GAAGhL,SAAS,CAAC3D,EAAE,CAACO,IAAH,CAAQ,OAAR,CAAD,CAA1B;AACD;;AAEDhF,IAAAA,IAAI,GAAG;AACLjB,MAAAA,IAAI,EAAEuT,OADD;AAELjJ,MAAAA,IAAI,EAAEA,IAFD;AAGLmJ,MAAAA,KAAK,EAAEA,KAHF;AAILC,MAAAA,MAAM,EAAE;AACNxH,QAAAA,IAAI,EAAEyH,SADA;AAENxB,QAAAA,OAAO,EAAEyB,YAFH;AAGNxB,QAAAA,KAAK,EAAE;AACLhB,UAAAA,IAAI,EAAEyC;AADD;AAHD,OAJH;AAWLS,MAAAA,gBAAgB,EAAER,qBAXb;AAYLS,MAAAA,QAAQ,EAAE;AACRrI,QAAAA,IAAI,EAAEiI,aADE;AAERhC,QAAAA,OAAO,EAAEiC,kBAFD;AAGRC,QAAAA,cAAc,EAAEA;AAHR;AAZL,KAAP;AAmBA,WAAOpT,IAAP;AACD,GAnID;AAoID,CAxID;;;;;;;ACLA;AACA;AACA;AACA;AAEArB,MAAM,CAACC,OAAP,GAAiB,UAASmI,GAAT,EAAc;AAC3B,MAAImB,IAAI,GAAG,IAAX;AACAA,EAAAA,IAAI,CAACnB,GAAL,GAAWA,GAAX;;AAEAmB,EAAAA,IAAI,CAACgS,wBAAL,GAAgC,UAAUhP,IAAV,EAAgB;AAC5C,QAAI9C,SAAS,GAAGF,IAAI,CAACnB,GAAL,CAASqB,SAAzB;AACA,QAAIC,SAAS,GAAGH,IAAI,CAACnB,GAAL,CAASsB,SAAzB;AACA,QAAIC,YAAY,GAAGJ,IAAI,CAACnB,GAAL,CAASuB,YAA5B,CAH4C,CAK5C;;AACA,QAAIE,IAAI,GAAG,SAAPA,IAAO,CAAUC,QAAV,EAAoB;AAC3B,WAAK,IAAIrF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKC,MAAzB,EAAiCD,CAAC,EAAlC,EAAsC;AAClCqF,QAAAA,QAAQ,CAAC,KAAKrF,CAAL,CAAD,CAAR;AACH;AACJ,KAJD;;AAMA,QAAImY,KAAK,GAAG,EAAZ;AAAA,QAAgB9W,EAAhB;AACA8W,IAAAA,KAAK,CAACpT,OAAN,GAAgB,EAAhB;AAEAoT,IAAAA,KAAK,CAACrN,IAAN,GAAahD,IAAI,CAACrG,GAAL,CAAS,MAAT,EAAiBK,GAAjB,CAAqB,IAArB,CAAb;AAEA,QAAIsW,eAAe,GAAGtQ,IAAI,CAACH,OAAL,CAAa,0BAAb,CAAtB;AACA,QAAIyH,KAAK,GAAGgJ,eAAe,CAAC3W,GAAhB,CAAoB,OAApB,EAA6BK,GAA7B,EAAZ;AAEAsW,IAAAA,eAAe,CAACrT,OAAhB,GAA0BK,IAA1B,CAA+B,UAAS+F,KAAT,EAAgB;AAE3C,UAAIkN,UAAU,GAAG,EAAjB,CAF2C,CAG3C;AACA;;AACA,UAAIC,GAAG,GAAGnN,KAAK,CAAC1J,GAAN,CAAU,KAAV,CAAV;AACA,UAAI8W,EAAE,GAAGD,GAAG,CAAC3W,QAAJ,CAAa,mBAAb,CAAT;AACA,UAAIU,UAAU,GAAGiW,GAAG,CAAC7W,GAAJ,CAAQ,YAAR,EAAsBG,IAAtB,CAA2B,MAA3B,CAAjB;AACA,UAAI4W,EAAE,GAAGF,GAAG,CAAC7W,GAAJ,CAAQ,IAAR,EAAcG,IAAd,CAAmB,MAAnB,CAAT;AACA,UAAI6W,UAAU,GAAGH,GAAG,CAAC7W,GAAJ,CAAQ,YAAR,EAAsBG,IAAtB,CAA2B,MAA3B,CAAjB;AACA,UAAI8I,IAAI,GAAG4N,GAAG,CAAC7W,GAAJ,CAAQ,MAAR,CAAX;AACA,UAAIoG,IAAI,GAAG6C,IAAI,CAAC9I,IAAL,CAAU,aAAV,CAAX;AACA,UAAI8W,aAAa,GAAG1T,SAAS,CAACmG,KAAK,CAAC1J,GAAN,CAAU,eAAV,CAAD,CAA7B,CAZ2C,CAc3C;;AACA,UAAIkX,QAAQ,GAAG;AACXhB,QAAAA,cAAc,EAAEe,aADL;AAEX7Q,QAAAA,IAAI,EAAEA,IAFK;AAGX+Q,QAAAA,kBAAkB,EAAC;AAHR,OAAf,CAf2C,CAqB3C;;AAEA,UAAIC,GAAG,GAAG1N,KAAK,CAACxJ,QAAN,CAAe,mBAAf,CAAV;AACAkX,MAAAA,GAAG,CAACzT,IAAJ,GAAWA,IAAX;AAEAyT,MAAAA,GAAG,CAACzT,IAAJ,CAAS,UAASmT,EAAT,EAAY;AAEjB,YAAIO,OAAO,GAAG;AACVC,UAAAA,SAAS,EAAGR,EAAE,CAAC3W,IAAH,CAAQ,UAAR,CADF;AAEVoX,UAAAA,YAAY,EAAG;AAFL,SAAd;AAKA,YAAIC,GAAG,GAAGV,EAAE,CAAC5W,QAAH,CAAY,aAAZ,CAAV;AACAsX,QAAAA,GAAG,CAAC7T,IAAJ,GAAWA,IAAX,CARiB,CAUjB;;AACA6T,QAAAA,GAAG,CAAC7T,IAAJ,CAAS,UAAS8T,EAAT,EAAa;AAClBJ,UAAAA,OAAO,CAACE,YAAR,CAAqB/W,IAArB,CAA0B;AACtBkX,YAAAA,UAAU,EAAED,EAAE,CAACtX,IAAH,CAAQ,WAAR,CADU;AAEtBwX,YAAAA,SAAS,EAAEF,EAAE,CAACtX,IAAH,CAAQ,UAAR,CAFW;AAGtByX,YAAAA,YAAY,EAAGH,EAAE,CAACzX,GAAH,CAAO,OAAP,EAAgBG,IAAhB,CAAqB,aAArB,CAHO;AAItBsK,YAAAA,MAAM,EAAEgN,EAAE,CAACzX,GAAH,CAAO,YAAP,EAAqBG,IAArB,CAA0B,MAA1B;AAJc,WAA1B;AAMH,SAPD;AASA+W,QAAAA,QAAQ,CAACC,kBAAT,CAA4B3W,IAA5B,CAAiC6W,OAAjC;AAEH,OAtBD,EA1B2C,CAkD3C;;AACAT,MAAAA,UAAU,CAAC,KAAD,CAAV,GAAoBM,QAApB;AACAR,MAAAA,KAAK,CAACpT,OAAN,CAAc9C,IAAd,CAAmBoW,UAAnB;AACH,KArDD;AAuDA,WAAOF,KAAP;AACH,GA5ED;AA6EH,CAjFD;;;;;;;ACLA;AAEA5c,MAAM,CAACC,OAAP,GAAiB,UAAUsM,IAAV,EAAgBlL,IAAhB,EAAsB;AAEnC,MAAIwI,IAAI,GAAG,SAAPA,IAAO,CAAUC,QAAV,EAAoB;AAC3B,SAAK,IAAIrF,CAAC,GAAG,CAAb,EAAgBA,CAAC,GAAG,KAAKC,MAAzB,EAAiCD,CAAC,EAAlC,EAAsC;AAClCqF,MAAAA,QAAQ,CAAC,KAAKrF,CAAL,CAAD,CAAR;AACH;AACJ,GAJD;;AAMA,MAAIsZ,kBAAkB,GAAG,SAArBA,kBAAqB,CAASjX,UAAT,EAAqBzF,IAArB,EAA2B;AAChD,SAAK,IAAI2c,QAAT,IAAqB3c,IAArB,EAA2B;AACvB,UAAIA,IAAI,CAACwC,cAAL,CAAoBma,QAApB,CAAJ,EAAmC;AAC/B,YAAIC,CAAC,GAAG5c,IAAI,CAAC2c,QAAD,CAAJ,CAAelX,UAAvB,CAD+B,CAE/B;;AACA,YAAGmX,CAAH,EAAM;AACF,cAAGA,CAAC,KAAKnX,UAAT,EAAqB;AACjB;AACA,mBAAO,IAAP;AACH;AACJ;AACJ;AACJ;;AACD,WAAO,KAAP;AACH,GAdD;;AAgBA,MAAIoX,WAAW,GAAG3R,IAAI,CAACnG,QAAL,CAAc,SAAd,CAAlB;AACA8X,EAAAA,WAAW,CAACrU,IAAZ,GAAmBA,IAAnB;AAEAqU,EAAAA,WAAW,CAACrU,IAAZ,CAAiB,UAAS1C,CAAT,EAAY;AAEzB,QAAIgI,IAAI,GAAGhI,CAAC,CAACjB,GAAF,CAAM,MAAN,EAAcG,IAAd,CAAmB,aAAnB,CAAX;AACA,QAAIS,UAAU,GAAIK,CAAC,CAACjB,GAAF,CAAM,YAAN,EAAoBG,IAApB,CAAyB,MAAzB,CAAlB;AAEA,QAAI8X,kBAAkB,GAAGJ,kBAAkB,CAACjX,UAAD,EAAazF,IAAb,CAA3C;;AAEA,QAAI8N,IAAJ,EAAU;AACN,UAAIiP,QAAQ,GAAGjP,IAAI,CAACkP,KAAL,CAAW,GAAX,EAAgBC,IAAhB,CAAqB,GAArB,EAA0BvZ,WAA1B,EAAf,CADM,CAGN;;AAEA,UAAI,CAAC1D,IAAI,CAAC+c,QAAD,CAAL,IAAmB,CAACD,kBAAxB,EAA4C;AACxC;AACA9c,QAAAA,IAAI,CAAC+c,QAAD,CAAJ,GAAiB,EAAjB;AACH;;AAED,UAAG/c,IAAI,CAAC+c,QAAD,CAAP,EAAmB;AACf/c,QAAAA,IAAI,CAAC+c,QAAD,CAAJ,CAAezO,WAAf,GAA6BR,IAA7B;AACA9N,QAAAA,IAAI,CAAC+c,QAAD,CAAJ,CAAetX,UAAf,GAA4BA,UAA5B;AACAzF,QAAAA,IAAI,CAAC+c,QAAD,CAAJ,CAAe7O,IAAf,GAAsBpI,CAAC,CAACjB,GAAF,CAAM,MAAN,EAAcK,GAAd,CAAkB,IAAlB,CAAtB;AACH;AAEJ;AACJ,GAxBD;AAyBH,CApDD;;;;;;;;ACFA;;;;;;;;ACAA;;;;;;UCAA;UACA;;UAEA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;;UAEA;UACA;;UAEA;UACA;UACA;;;;;WCtBA;WACA;WACA;WACA;WACA,GAAG;WACH;WACA;WACA,CAAC;;;;;UEPD;UACA;UACA;UACA","sources":["webpack://bluebutton/webpack/universalModuleDefinition","webpack://bluebutton/./lib/bluebutton.js","webpack://bluebutton/./lib/core.js","webpack://bluebutton/./lib/core/codes.js","webpack://bluebutton/./lib/core/common.js","webpack://bluebutton/./lib/core/xml.js","webpack://bluebutton/./lib/documents.js","webpack://bluebutton/./lib/documents/c32.js","webpack://bluebutton/./lib/documents/ccd.js","webpack://bluebutton/./lib/documents/ccda.js","webpack://bluebutton/./lib/documents/ccdar2.js","webpack://bluebutton/./lib/generators.js","webpack://bluebutton/./lib/generators/c32.js","webpack://bluebutton/./lib/generators/ccda.js","webpack://bluebutton/./lib/parsers.js","webpack://bluebutton/./lib/parsers/c32.js","webpack://bluebutton/./lib/parsers/c32/allergies.js","webpack://bluebutton/./lib/parsers/c32/demographics.js","webpack://bluebutton/./lib/parsers/c32/document.js","webpack://bluebutton/./lib/parsers/c32/encounters.js","webpack://bluebutton/./lib/parsers/c32/immunizations.js","webpack://bluebutton/./lib/parsers/c32/medications.js","webpack://bluebutton/./lib/parsers/c32/problems.js","webpack://bluebutton/./lib/parsers/c32/procedures.js","webpack://bluebutton/./lib/parsers/c32/results.js","webpack://bluebutton/./lib/parsers/c32/vitals.js","webpack://bluebutton/./lib/parsers/ccd.js","webpack://bluebutton/./lib/parsers/ccd/document.js","webpack://bluebutton/./lib/parsers/ccda.js","webpack://bluebutton/./lib/parsers/ccda/allergies.js","webpack://bluebutton/./lib/parsers/ccda/care_plan.js","webpack://bluebutton/./lib/parsers/ccda/demographics.js","webpack://bluebutton/./lib/parsers/ccda/document.js","webpack://bluebutton/./lib/parsers/ccda/encounters.js","webpack://bluebutton/./lib/parsers/ccda/free_text.js","webpack://bluebutton/./lib/parsers/ccda/functional_statuses.js","webpack://bluebutton/./lib/parsers/ccda/immunizations.js","webpack://bluebutton/./lib/parsers/ccda/instructions.js","webpack://bluebutton/./lib/parsers/ccda/medications.js","webpack://bluebutton/./lib/parsers/ccda/problems.js","webpack://bluebutton/./lib/parsers/ccda/procedures.js","webpack://bluebutton/./lib/parsers/ccda/results.js","webpack://bluebutton/./lib/parsers/ccda/smoking_status.js","webpack://bluebutton/./lib/parsers/ccda/vitals.js","webpack://bluebutton/./lib/parsers/ccdar2.js","webpack://bluebutton/./lib/parsers/ccdar2/document.js","webpack://bluebutton/./lib/parsers/ccdar2/health_concerns.js","webpack://bluebutton/./lib/parsers/generic.js","webpack://bluebutton/external commonjs \"@xmldom/xmldom\"","webpack://bluebutton/external commonjs \"lodash\"","webpack://bluebutton/webpack/bootstrap","webpack://bluebutton/webpack/runtime/global","webpack://bluebutton/webpack/before-startup","webpack://bluebutton/webpack/startup","webpack://bluebutton/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"bluebutton\"] = factory();\n\telse\n\t\troot[\"bluebutton\"] = factory();\n})(self, () => {\nreturn ","'use strict';\r\n/*\r\n * ...\r\n */\r\n\r\nvar Core = require('./core');\r\n\r\nvar Documents = require('./documents');\r\n\r\nvar Generators = require('./generators');\r\n\r\nvar Parsers = require('./parsers');\r\n\r\n\r\n/* exported BlueButton */\r\nmodule.exports = function (source, opts) {\r\n var type, parsedData, parsedDocument;\r\n \r\n // Look for options\r\n if (!opts) opts = {};\r\n \r\n // Detect and parse the source data\r\n parsedData = Core.parseData(source);\r\n \r\n // Detect and parse the document\r\n if (opts.parser) {\r\n \r\n // TODO: parse the document with provided custom parser\r\n parsedDocument = opts.parser();\r\n \r\n } else {\r\n var documents = new Documents();\r\n type = documents.detect(parsedData);\r\n var parsers = new Parsers(documents);\r\n switch (type) {\r\n case 'c32':\r\n parsedData = documents.C32.process(parsedData);\r\n parsedDocument = parsers.C32.run(parsedData);\r\n break;\r\n case 'ccda':\r\n parsedData = documents.CCDA.process(parsedData);\r\n parsedDocument = parsers.CCDA.run(parsedData);\r\n break;\r\n case 'ccdar2':\r\n parsedData = documents.CCDAR2.process(parsedData);\r\n parsedDocument = parsers.CCDAR2.run(parsedData);\r\n break;\r\n case 'ccd':\r\n parsedData = documents.CCD.process(parsedData);\r\n parsedDocument = parsers.CCD.run(parsedData);\r\n break;\r\n case 'json':\r\n /* Expects a call like:\r\n * BlueButton(json string, {\r\n * generatorType: 'ccda',\r\n * template: < EJS file contents >\r\n * })\r\n * The returned \"type\" will be the requested type (not \"json\")\r\n * and the XML will be turned as a string in the 'data' key\r\n */\r\n switch (opts.generatorType) {\r\n // only the unit tests ever need to worry about this testingMode argument\r\n case 'c32':\r\n type = 'c32';\r\n parsedDocument = Generators.C32.run(parsedData, opts.template, opts.testingMode);\r\n break;\r\n case 'ccda':\r\n type = 'ccda';\r\n parsedDocument = Generators.CCDA.run(parsedData, opts.template, opts.testingMode);\r\n break;\r\n }\r\n }\r\n }\r\n \r\n return {\r\n type: type,\r\n data: parsedDocument,\r\n source: parsedData\r\n };\r\n\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nvar Codes = require('./core/codes');\r\nvar XML = require('./core/xml');\r\nvar { stripWhitespace } = require('./core/common');\r\n\r\n/* exported Core */\r\nmodule.exports = {\r\n parseData: parseData,\r\n stripWhitespace: stripWhitespace,\r\n json: json,\r\n trim: trim,\r\n Codes: Codes,\r\n XML: XML\r\n};\r\n/*\r\n * ...\r\n */\r\nfunction parseData(source) {\r\n source = stripWhitespace(source);\r\n \r\n if (source.charAt(0) === '<') {\r\n try {\r\n return XML.parse(source);\r\n } catch (e) {\r\n if (console.log) {\r\n console.log(\"File looked like it might be XML but couldn't be parsed.\");\r\n }\r\n }\r\n }\r\n\r\n try {\r\n return JSON.parse(source);\r\n } catch (e) {\r\n if (console.error) {\r\n console.error(\"Error: Cannot parse this file. BB.js only accepts valid XML \" +\r\n \"(for parsing) or JSON (for generation). If you are attempting to provide \" +\r\n \"XML or JSON, please run your data through a validator to see if it is malformed.\\n\");\r\n }\r\n throw e;\r\n }\r\n};\r\n\r\n/*\r\n * A wrapper around JSON.stringify which allows us to produce customized JSON.\r\n *\r\n * See https://developer.mozilla.org/en-US/docs/Web/\r\n * JavaScript/Guide/Using_native_JSON#The_replacer_parameter\r\n * for documentation on the replacerFn.\r\n */\r\nfunction json() {\r\n\r\n var datePad = function(number) {\r\n if (number < 10) {\r\n return '0' + number;\r\n }\r\n return number;\r\n };\r\n \r\n var replacerFn = function(key, value) {\r\n /* By default, Dates are output as ISO Strings like \"2014-01-03T08:00:00.000Z.\" This is\r\n * tricky when all we have is a date (not a datetime); JS sadly ignores that distinction.\r\n *\r\n * To paper over this JS wart, we use two different JSON formats for dates and datetimes.\r\n * This is a little ugly but makes sure that the dates/datetimes mostly just parse\r\n * correclty for clients:\r\n *\r\n * 1. Datetimes are rendered as standard ISO strings, without the misleading millisecond\r\n * precision (misleading because we don't have it): YYYY-MM-DDTHH:mm:ssZ\r\n * 2. Dates are rendered as MM/DD/YYYY. This ensures they are parsed as midnight local-time,\r\n * no matter what local time is, and therefore ensures the date is always correct.\r\n * Outputting \"YYYY-MM-DD\" would lead most browsers/node to assume midnight UTC, which\r\n * means \"2014-04-27\" suddenly turns into \"04/26/2014 at 5PM\" or just \"04/26/2014\"\r\n * if you format it as a date...\r\n *\r\n * See http://stackoverflow.com/questions/2587345/javascript-date-parse and\r\n * http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html\r\n * for more on this issue.\r\n */\r\n var originalValue = this[key]; // a Date\r\n\r\n if ( value && (originalValue instanceof Date) && !isNaN(originalValue.getTime()) ) {\r\n\r\n // If while parsing we indicated that there was time-data specified, or if we see\r\n // non-zero values in the hour/minutes/seconds/millis fields, output a datetime.\r\n if (originalValue._parsedWithTimeData ||\r\n originalValue.getHours() || originalValue.getMinutes() ||\r\n originalValue.getSeconds() || originalValue.getMilliseconds()) {\r\n\r\n // Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/\r\n // Reference/Global_Objects/Date/toISOString\r\n return originalValue.getUTCFullYear() +\r\n '-' + datePad( originalValue.getUTCMonth() + 1 ) +\r\n '-' + datePad( originalValue.getUTCDate() ) +\r\n 'T' + datePad( originalValue.getUTCHours() ) +\r\n ':' + datePad( originalValue.getUTCMinutes() ) +\r\n ':' + datePad( originalValue.getUTCSeconds() ) +\r\n 'Z';\r\n }\r\n \r\n // We just have a pure date\r\n return datePad( originalValue.getMonth() + 1 ) +\r\n '/' + datePad( originalValue.getDate() ) +\r\n '/' + originalValue.getFullYear();\r\n\r\n }\r\n\r\n return value;\r\n };\r\n \r\n return JSON.stringify(this, replacerFn, 2);\r\n};\r\n\r\n\r\n/*\r\n * Removes all `null` properties from an object.\r\n */\r\nfunction trim(o) {\r\n var y;\r\n for (var x in o) {\r\n if (o.hasOwnProperty(x)) {\r\n y = o[x];\r\n // if (y === null || (y instanceof Object && Object.keys(y).length == 0)) {\r\n if (y === null) {\r\n delete o[x];\r\n }\r\n if (y instanceof Object) y = trim(y);\r\n }\r\n }\r\n return o;\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\n\r\n \r\n/*\r\n * Administrative Gender (HL7 V3)\r\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=8DE75E17-176B-DE11-9B52-0015173D1785\r\n * OID: 2.16.840.1.113883.1.11.1\r\n */\r\nvar GENDER_MAP = {\r\n 'F': 'female',\r\n 'M': 'male',\r\n 'UN': 'undifferentiated'\r\n};\r\n\r\n/*\r\n * Marital Status (HL7)\r\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=46D34BBC-617F-DD11-B38D-00188B398520\r\n * OID: 2.16.840.1.114222.4.11.809\r\n */\r\nvar MARITAL_STATUS_MAP = {\r\n 'N': 'annulled',\r\n 'C': 'common law',\r\n 'D': 'divorced',\r\n 'P': 'domestic partner',\r\n 'I': 'interlocutory',\r\n 'E': 'legally separated',\r\n 'G': 'living together',\r\n 'M': 'married',\r\n 'O': 'other',\r\n 'R': 'registered domestic partner',\r\n 'A': 'separated',\r\n 'S': 'single',\r\n 'U': 'unknown',\r\n 'B': 'unmarried',\r\n 'T': 'unreported',\r\n 'W': 'widowed'\r\n};\r\n\r\n/*\r\n * Religious Affiliation (HL7 V3)\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=6BFDBFB5-A277-DE11-9B52-0015173D1785\r\n * OID: 2.16.840.1.113883.5.1076\r\n */\r\nvar RELIGION_MAP = {\r\n \"1001\": \"adventist\",\r\n \"1002\": \"african religions\",\r\n \"1003\": \"afro-caribbean religions\",\r\n \"1004\": \"agnosticism\",\r\n \"1005\": \"anglican\",\r\n \"1006\": \"animism\",\r\n \"1061\": \"assembly of god\",\r\n \"1007\": \"atheism\",\r\n \"1008\": \"babi & baha'i faiths\",\r\n \"1009\": \"baptist\",\r\n \"1010\": \"bon\",\r\n \"1062\": \"brethren\",\r\n \"1011\": \"cao dai\",\r\n \"1012\": \"celticism\",\r\n \"1013\": \"christian (non-catholic, non-specific)\",\r\n \"1063\": \"christian scientist\",\r\n \"1064\": \"church of christ\",\r\n \"1065\": \"church of god\",\r\n \"1014\": \"confucianism\",\r\n \"1066\": \"congregational\",\r\n \"1015\": \"cyberculture religions\",\r\n \"1067\": \"disciples of christ\",\r\n \"1016\": \"divination\",\r\n \"1068\": \"eastern orthodox\",\r\n \"1069\": \"episcopalian\",\r\n \"1070\": \"evangelical covenant\",\r\n \"1017\": \"fourth way\",\r\n \"1018\": \"free daism\",\r\n \"1071\": \"friends\",\r\n \"1072\": \"full gospel\",\r\n \"1019\": \"gnosis\",\r\n \"1020\": \"hinduism\",\r\n \"1021\": \"humanism\",\r\n \"1022\": \"independent\",\r\n \"1023\": \"islam\",\r\n \"1024\": \"jainism\",\r\n \"1025\": \"jehovah's witnesses\",\r\n \"1026\": \"judaism\",\r\n \"1027\": \"latter day saints\",\r\n \"1028\": \"lutheran\",\r\n \"1029\": \"mahayana\",\r\n \"1030\": \"meditation\",\r\n \"1031\": \"messianic judaism\",\r\n \"1073\": \"methodist\",\r\n \"1032\": \"mitraism\",\r\n \"1074\": \"native american\",\r\n \"1075\": \"nazarene\",\r\n \"1033\": \"new age\",\r\n \"1034\": \"non-roman catholic\",\r\n \"1035\": \"occult\",\r\n \"1036\": \"orthodox\",\r\n \"1037\": \"paganism\",\r\n \"1038\": \"pentecostal\",\r\n \"1076\": \"presbyterian\",\r\n \"1039\": \"process, the\",\r\n \"1077\": \"protestant\",\r\n \"1078\": \"protestant, no denomination\",\r\n \"1079\": \"reformed\",\r\n \"1040\": \"reformed/presbyterian\",\r\n \"1041\": \"roman catholic church\",\r\n \"1080\": \"salvation army\",\r\n \"1042\": \"satanism\",\r\n \"1043\": \"scientology\",\r\n \"1044\": \"shamanism\",\r\n \"1045\": \"shiite (islam)\",\r\n \"1046\": \"shinto\",\r\n \"1047\": \"sikism\",\r\n \"1048\": \"spiritualism\",\r\n \"1049\": \"sunni (islam)\",\r\n \"1050\": \"taoism\",\r\n \"1051\": \"theravada\",\r\n \"1081\": \"unitarian universalist\",\r\n \"1052\": \"unitarian-universalism\",\r\n \"1082\": \"united church of christ\",\r\n \"1053\": \"universal life church\",\r\n \"1054\": \"vajrayana (tibetan)\",\r\n \"1055\": \"veda\",\r\n \"1056\": \"voodoo\",\r\n \"1057\": \"wicca\",\r\n \"1058\": \"yaohushua\",\r\n \"1059\": \"zen buddhism\",\r\n \"1060\": \"zoroastrianism\"\r\n};\r\n\r\n/*\r\n * Race & Ethnicity (HL7 V3)\r\n * Full list at http://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.6.238\r\n * OID: 2.16.840.1.113883.6.238\r\n *\r\n * Abbreviated list closer to real usage at: (Race / Ethnicity)\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=67D34BBC-617F-DD11-B38D-00188B398520\r\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=35D34BBC-617F-DD11-B38D-00188B398520\r\n */\r\nvar RACE_ETHNICITY_MAP = {\r\n '2028-9': 'asian',\r\n '2054-5': 'black or african american',\r\n '2135-2': 'hispanic or latino',\r\n '2076-8': 'native',\r\n '2186-5': 'not hispanic or latino',\r\n '2131-1': 'other',\r\n '2106-3': 'white'\r\n};\r\n\r\n/*\r\n * Role (HL7 V3)\r\n * https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.5.111\r\n * OID: 2.16.840.1.113883.5.111\r\n */\r\nvar ROLE_MAP = {\r\n \"ACC\": \"accident site\",\r\n \"ACHFID\": \"accreditation location identifier\",\r\n \"ACTMIL\": \"active duty military\",\r\n \"ALL\": \"allergy clinic\",\r\n \"AMB\": \"ambulance\",\r\n \"AMPUT\": \"amputee clinic\",\r\n \"ANTIBIOT\": \"antibiotic\",\r\n \"ASSIST\": \"assistive non-person living subject\",\r\n \"AUNT\": \"aunt\",\r\n \"B\": \"blind\",\r\n \"BF\": \"beef\",\r\n \"BILL\": \"billing contact\",\r\n \"BIOTH\": \"biotherapeutic non-person living subject\",\r\n \"BL\": \"broiler\",\r\n \"BMTC\": \"bone marrow transplant clinic\",\r\n \"BMTU\": \"bone marrow transplant unit\",\r\n \"BR\": \"breeder\",\r\n \"BREAST\": \"breast clinic\",\r\n \"BRO\": \"brother\",\r\n \"BROINLAW\": \"brother-in-law\",\r\n \"C\": \"calibrator\",\r\n \"CANC\": \"child and adolescent neurology clinic\",\r\n \"CAPC\": \"child and adolescent psychiatry clinic\",\r\n \"CARD\": \"ambulatory health care facilities; clinic/center; rehabilitation: cardiac facilities\",\r\n \"CAS\": \"asylum seeker\",\r\n \"CASM\": \"single minor asylum seeker\",\r\n \"CATH\": \"cardiac catheterization lab\",\r\n \"CCO\": \"clinical companion\",\r\n \"CCU\": \"coronary care unit\",\r\n \"CHEST\": \"chest unit\",\r\n \"CHILD\": \"child\",\r\n \"CHLDADOPT\": \"adopted child\",\r\n \"CHLDFOST\": \"foster child\",\r\n \"CHLDINLAW\": \"child in-law\",\r\n \"CHR\": \"chronic care facility\",\r\n \"CLAIM\": \"claimant\",\r\n \"CN\": \"national\",\r\n \"CNRP\": \"non-country member without residence permit\",\r\n \"CNRPM\": \"non-country member minor without residence permit\",\r\n \"CO\": \"companion\",\r\n \"COAG\": \"coagulation clinic\",\r\n \"COCBEN\": \"continuity of coverage beneficiary\",\r\n \"COMM\": \"community location\",\r\n \"COMMUNITYLABORATORY\": \"community laboratory\",\r\n \"COUSN\": \"cousin\",\r\n \"CPCA\": \"permit card applicant\",\r\n \"CRIMEVIC\": \"crime victim\",\r\n \"CRP\": \"non-country member with residence permit\",\r\n \"CRPM\": \"non-country member minor with residence permit\",\r\n \"CRS\": \"colon and rectal surgery clinic\",\r\n \"CSC\": \"community service center\",\r\n \"CVDX\": \"cardiovascular diagnostics or therapeutics unit\",\r\n \"DA\": \"dairy\",\r\n \"DADDR\": \"delivery address\",\r\n \"DAU\": \"natural daughter\",\r\n \"DAUADOPT\": \"adopted daughter\",\r\n \"DAUC\": \"daughter\",\r\n \"DAUFOST\": \"foster daughter\",\r\n \"DAUINLAW\": \"daughter in-law\",\r\n \"DC\": \"therapeutic class\",\r\n \"DEBR\": \"debridement\",\r\n \"DERM\": \"dermatology clinic\",\r\n \"DIFFABL\": \"differently abled\",\r\n \"DOMPART\": \"domestic partner\",\r\n \"DPOWATT\": \"durable power of attorney\",\r\n \"DR\": \"draft\",\r\n \"DU\": \"dual\",\r\n \"DX\": \"diagnostics or therapeutics unit\",\r\n \"E\": \"electronic qc\",\r\n \"ECHO\": \"echocardiography lab\",\r\n \"ECON\": \"emergency contact\",\r\n \"ENDO\": \"endocrinology clinic\",\r\n \"ENDOS\": \"endoscopy lab\",\r\n \"ENROLBKR\": \"enrollment broker\",\r\n \"ENT\": \"otorhinolaryngology clinic\",\r\n \"EPIL\": \"epilepsy unit\",\r\n \"ER\": \"emergency room\",\r\n \"ERL\": \"enrollment\",\r\n \"ETU\": \"emergency trauma unit\",\r\n \"EXCEST\": \"executor of estate\",\r\n \"EXT\": \"extended family member\",\r\n \"F\": \"filler proficiency\",\r\n \"FAMDEP\": \"family dependent\",\r\n \"FAMMEMB\": \"family member\",\r\n \"FI\": \"fiber\",\r\n \"FMC\": \"family medicine clinic\",\r\n \"FRND\": \"unrelated friend\",\r\n \"FSTUD\": \"full-time student\",\r\n \"FTH\": \"father\",\r\n \"FTHINLAW\": \"father-in-law\",\r\n \"FULLINS\": \"fully insured coverage sponsor\",\r\n \"G\": \"group\",\r\n \"GACH\": \"hospitals; general acute care hospital\",\r\n \"GD\": \"generic drug\",\r\n \"GDF\": \"generic drug form\",\r\n \"GDS\": \"generic drug strength\",\r\n \"GDSF\": \"generic drug strength form\",\r\n \"GGRFTH\": \"great grandfather\",\r\n \"GGRMTH\": \"great grandmother\",\r\n \"GGRPRN\": \"great grandparent\",\r\n \"GI\": \"gastroenterology clinic\",\r\n \"GIDX\": \"gastroenterology diagnostics or therapeutics lab\",\r\n \"GIM\": \"general internal medicine clinic\",\r\n \"GRFTH\": \"grandfather\",\r\n \"GRMTH\": \"grandmother\",\r\n \"GRNDCHILD\": \"grandchild\",\r\n \"GRNDDAU\": \"granddaughter\",\r\n \"GRNDSON\": \"grandson\",\r\n \"GRPRN\": \"grandparent\",\r\n \"GT\": \"guarantor\",\r\n \"GUADLTM\": \"guardian ad lidem\",\r\n \"GUARD\": \"guardian\",\r\n \"GYN\": \"gynecology clinic\",\r\n \"HAND\": \"hand clinic\",\r\n \"HANDIC\": \"handicapped dependent\",\r\n \"HBRO\": \"half-brother\",\r\n \"HD\": \"hemodialysis unit\",\r\n \"HEM\": \"hematology clinic\",\r\n \"HLAB\": \"hospital laboratory\",\r\n \"HOMEHEALTH\": \"home health\",\r\n \"HOSP\": \"hospital\",\r\n \"HPOWATT\": \"healthcare power of attorney\",\r\n \"HRAD\": \"radiology unit\",\r\n \"HSIB\": \"half-sibling\",\r\n \"HSIS\": \"half-sister\",\r\n \"HTN\": \"hypertension clinic\",\r\n \"HU\": \"hospital unit\",\r\n \"HUSB\": \"husband\",\r\n \"HUSCS\": \"specimen collection site\",\r\n \"ICU\": \"intensive care unit\",\r\n \"IEC\": \"impairment evaluation center\",\r\n \"INDIG\": \"member of an indigenous people\",\r\n \"INFD\": \"infectious disease clinic\",\r\n \"INJ\": \"injured plaintiff\",\r\n \"INJWKR\": \"injured worker\",\r\n \"INLAB\": \"inpatient laboratory\",\r\n \"INPHARM\": \"inpatient pharmacy\",\r\n \"INV\": \"infertility clinic\",\r\n \"JURID\": \"jurisdiction location identifier\",\r\n \"L\": \"pool\",\r\n \"LABORATORY\": \"laboratory\",\r\n \"LOCHFID\": \"local location identifier\",\r\n \"LY\": \"layer\",\r\n \"LYMPH\": \"lympedema clinic\",\r\n \"MAUNT\": \"maternalaunt\",\r\n \"MBL\": \"medical laboratory\",\r\n \"MCOUSN\": \"maternalcousin\",\r\n \"MGDSF\": \"manufactured drug strength form\",\r\n \"MGEN\": \"medical genetics clinic\",\r\n \"MGGRFTH\": \"maternalgreatgrandfather\",\r\n \"MGGRMTH\": \"maternalgreatgrandmother\",\r\n \"MGGRPRN\": \"maternalgreatgrandparent\",\r\n \"MGRFTH\": \"maternalgrandfather\",\r\n \"MGRMTH\": \"maternalgrandmother\",\r\n \"MGRPRN\": \"maternalgrandparent\",\r\n \"MHSP\": \"military hospital\",\r\n \"MIL\": \"military\",\r\n \"MOBL\": \"mobile unit\",\r\n \"MT\": \"meat\",\r\n \"MTH\": \"mother\",\r\n \"MTHINLAW\": \"mother-in-law\",\r\n \"MU\": \"multiplier\",\r\n \"MUNCLE\": \"maternaluncle\",\r\n \"NBOR\": \"neighbor\",\r\n \"NBRO\": \"natural brother\",\r\n \"NCCF\": \"nursing or custodial care facility\",\r\n \"NCCS\": \"neurology critical care and stroke unit\",\r\n \"NCHILD\": \"natural child\",\r\n \"NEPH\": \"nephrology clinic\",\r\n \"NEPHEW\": \"nephew\",\r\n \"NEUR\": \"neurology clinic\",\r\n \"NFTH\": \"natural father\",\r\n \"NFTHF\": \"natural father of fetus\",\r\n \"NIECE\": \"niece\",\r\n \"NIENEPH\": \"niece/nephew\",\r\n \"NMTH\": \"natural mother\",\r\n \"NOK\": \"next of kin\",\r\n \"NPRN\": \"natural parent\",\r\n \"NS\": \"neurosurgery unit\",\r\n \"NSIB\": \"natural sibling\",\r\n \"NSIS\": \"natural sister\",\r\n \"O\": \"operator proficiency\",\r\n \"OB\": \"obstetrics clinic\",\r\n \"OF\": \"outpatient facility\",\r\n \"OMS\": \"oral and maxillofacial surgery clinic\",\r\n \"ONCL\": \"medical oncology clinic\",\r\n \"OPH\": \"opthalmology clinic\",\r\n \"OPTC\": \"optometry clinic\",\r\n \"ORG\": \"organizational contact\",\r\n \"ORTHO\": \"orthopedics clinic\",\r\n \"OUTLAB\": \"outpatient laboratory\",\r\n \"OUTPHARM\": \"outpatient pharmacy\",\r\n \"P\": \"patient\",\r\n \"PAINCL\": \"pain clinic\",\r\n \"PATHOLOGIST\": \"pathologist\",\r\n \"PAUNT\": \"paternalaunt\",\r\n \"PAYOR\": \"payor contact\",\r\n \"PC\": \"primary care clinic\",\r\n \"PCOUSN\": \"paternalcousin\",\r\n \"PEDC\": \"pediatrics clinic\",\r\n \"PEDCARD\": \"pediatric cardiology clinic\",\r\n \"PEDE\": \"pediatric endocrinology clinic\",\r\n \"PEDGI\": \"pediatric gastroenterology clinic\",\r\n \"PEDHEM\": \"pediatric hematology clinic\",\r\n \"PEDHO\": \"pediatric oncology clinic\",\r\n \"PEDICU\": \"pediatric intensive care unit\",\r\n \"PEDID\": \"pediatric infectious disease clinic\",\r\n \"PEDNEPH\": \"pediatric nephrology clinic\",\r\n \"PEDNICU\": \"pediatric neonatal intensive care unit\",\r\n \"PEDRHEUM\": \"pediatric rheumatology clinic\",\r\n \"PEDU\": \"pediatric unit\",\r\n \"PGGRFTH\": \"paternalgreatgrandfather\",\r\n \"PGGRMTH\": \"paternalgreatgrandmother\",\r\n \"PGGRPRN\": \"paternalgreatgrandparent\",\r\n \"PGRFTH\": \"paternalgrandfather\",\r\n \"PGRMTH\": \"paternalgrandmother\",\r\n \"PGRPRN\": \"paternalgrandparent\",\r\n \"PH\": \"policy holder\",\r\n \"PHARM\": \"pharmacy\",\r\n \"PHLEBOTOMIST\": \"phlebotomist\",\r\n \"PHU\": \"psychiatric hospital unit\",\r\n \"PL\": \"pleasure\",\r\n \"PLS\": \"plastic surgery clinic\",\r\n \"POD\": \"podiatry clinic\",\r\n \"POWATT\": \"power of attorney\",\r\n \"PRC\": \"pain rehabilitation center\",\r\n \"PREV\": \"preventive medicine clinic\",\r\n \"PRN\": \"parent\",\r\n \"PRNINLAW\": \"parent in-law\",\r\n \"PROCTO\": \"proctology clinic\",\r\n \"PROFF\": \"provider's office\",\r\n \"PROG\": \"program eligible\",\r\n \"PROS\": \"prosthodontics clinic\",\r\n \"PSI\": \"psychology clinic\",\r\n \"PSTUD\": \"part-time student\",\r\n \"PSY\": \"psychiatry clinic\",\r\n \"PSYCHF\": \"psychiatric care facility\",\r\n \"PT\": \"patient\",\r\n \"PTRES\": \"patient's residence\",\r\n \"PUNCLE\": \"paternaluncle\",\r\n \"Q\": \"quality control\",\r\n \"R\": \"replicate\",\r\n \"RADDX\": \"radiology diagnostics or therapeutics unit\",\r\n \"RADO\": \"radiation oncology unit\",\r\n \"RC\": \"racing\",\r\n \"RESPRSN\": \"responsible party\",\r\n \"RETIREE\": \"retiree\",\r\n \"RETMIL\": \"retired military\",\r\n \"RH\": \"rehabilitation hospital\",\r\n \"RHAT\": \"addiction treatment center\",\r\n \"RHEUM\": \"rheumatology clinic\",\r\n \"RHII\": \"intellectual impairment center\",\r\n \"RHMAD\": \"parents with adjustment difficulties center\",\r\n \"RHPI\": \"physical impairment center\",\r\n \"RHPIH\": \"physical impairment - hearing center\",\r\n \"RHPIMS\": \"physical impairment - motor skills center\",\r\n \"RHPIVS\": \"physical impairment - visual skills center\",\r\n \"RHU\": \"rehabilitation hospital unit\",\r\n \"RHYAD\": \"youths with adjustment difficulties center\",\r\n \"RNEU\": \"neuroradiology unit\",\r\n \"ROOM\": \"roommate\",\r\n \"RTF\": \"residential treatment facility\",\r\n \"SCHOOL\": \"school\",\r\n \"SCN\": \"screening\",\r\n \"SEE\": \"seeing\",\r\n \"SELF\": \"self\",\r\n \"SELFINS\": \"self insured coverage sponsor\",\r\n \"SH\": \"show\",\r\n \"SIB\": \"sibling\",\r\n \"SIBINLAW\": \"sibling in-law\",\r\n \"SIGOTHR\": \"significant other\",\r\n \"SIS\": \"sister\",\r\n \"SISINLAW\": \"sister-in-law\",\r\n \"SLEEP\": \"sleep disorders unit\",\r\n \"SNF\": \"skilled nursing facility\",\r\n \"SNIFF\": \"sniffing\",\r\n \"SON\": \"natural son\",\r\n \"SONADOPT\": \"adopted son\",\r\n \"SONC\": \"son\",\r\n \"SONFOST\": \"foster son\",\r\n \"SONINLAW\": \"son in-law\",\r\n \"SPMED\": \"sports medicine clinic\",\r\n \"SPON\": \"sponsored dependent\",\r\n \"SPOWATT\": \"special power of attorney\",\r\n \"SPS\": \"spouse\",\r\n \"STPBRO\": \"stepbrother\",\r\n \"STPCHLD\": \"step child\",\r\n \"STPDAU\": \"stepdaughter\",\r\n \"STPFTH\": \"stepfather\",\r\n \"STPMTH\": \"stepmother\",\r\n \"STPPRN\": \"step parent\",\r\n \"STPSIB\": \"step sibling\",\r\n \"STPSIS\": \"stepsister\",\r\n \"STPSON\": \"stepson\",\r\n \"STUD\": \"student\",\r\n \"SU\": \"surgery clinic\",\r\n \"SUBJECT\": \"self\",\r\n \"SURF\": \"substance use rehabilitation facility\",\r\n \"THIRDPARTY\": \"third party\",\r\n \"TPA\": \"third party administrator\",\r\n \"TR\": \"transplant clinic\",\r\n \"TRAVEL\": \"travel and geographic medicine clinic\",\r\n \"TRB\": \"tribal member\",\r\n \"UMO\": \"utilization management organization\",\r\n \"UNCLE\": \"uncle\",\r\n \"UPC\": \"underage protection center\",\r\n \"URO\": \"urology clinic\",\r\n \"V\": \"verifying\",\r\n \"VET\": \"veteran\",\r\n \"VL\": \"veal\",\r\n \"WARD\": \"ward\",\r\n \"WIFE\": \"wife\",\r\n \"WL\": \"wool\",\r\n \"WND\": \"wound clinic\",\r\n \"WO\": \"working\",\r\n \"WORK\": \"work site\",\r\n};\r\n\r\nvar PROBLEM_STATUS_MAP = {\r\n \"55561003\": \"active\",\r\n \"73425007\": \"inactive\",\r\n \"413322009\": \"resolved\"\r\n};\r\n\r\n\r\n// copied from _.invert to avoid making browser users include all of underscore\r\nvar invertKeys = function(obj) {\r\n var result = {};\r\n var keys = Object.keys(obj);\r\n for (var i = 0, length = keys.length; i < length; i++) {\r\n result[obj[keys[i]]] = keys[i];\r\n }\r\n return result;\r\n};\r\n\r\nvar lookupFnGenerator = function(map) {\r\n return function(key) {\r\n return map[key] || null;\r\n };\r\n};\r\nvar reverseLookupFnGenerator = function(map) {\r\n return function(key) {\r\n if (!key) { return null; }\r\n var invertedMap = invertKeys(map);\r\n key = key.toLowerCase();\r\n return invertedMap[key] || null;\r\n };\r\n};\r\n\r\n\r\nmodule.exports = {\r\n gender: lookupFnGenerator(GENDER_MAP),\r\n reverseGender: reverseLookupFnGenerator(GENDER_MAP),\r\n maritalStatus: lookupFnGenerator(MARITAL_STATUS_MAP),\r\n reverseMaritalStatus: reverseLookupFnGenerator(MARITAL_STATUS_MAP),\r\n religion: lookupFnGenerator(RELIGION_MAP),\r\n reverseReligion: reverseLookupFnGenerator(RELIGION_MAP),\r\n raceEthnicity: lookupFnGenerator(RACE_ETHNICITY_MAP),\r\n reverseRaceEthnicity: reverseLookupFnGenerator(RACE_ETHNICITY_MAP),\r\n role: lookupFnGenerator(ROLE_MAP),\r\n reverseRole: reverseLookupFnGenerator(ROLE_MAP),\r\n problemStatus: lookupFnGenerator(PROBLEM_STATUS_MAP),\r\n reverseProblemStatus: reverseLookupFnGenerator(PROBLEM_STATUS_MAP)\r\n};\r\n","module.exports = {\r\n stripWhitespace: stripWhitespace\r\n}\r\n\r\nfunction stripWhitespace (str) {\r\n if (!str) { return str; }\r\n return str.trim();\r\n};\r\n","/*\r\n * ...\r\n */\r\nvar { stripWhitespace } = require('./common');\r\n/*\r\n * A function used to wrap DOM elements in an object so methods can be added\r\n * to the element object. IE8 does not allow methods to be added directly to\r\n * DOM objects.\r\n */\r\nvar wrapElement = function (el) {\r\n function wrapElementHelper(currentEl) {\r\n return {\r\n el: currentEl,\r\n template: template,\r\n content: content,\r\n tag: tag,\r\n immediateChildTag: immediateChildTag,\r\n elsByTag: elsByTag,\r\n attr: attr,\r\n boolAttr: boolAttr,\r\n val: val,\r\n isEmpty: isEmpty\r\n };\r\n }\r\n \r\n // el is an array of elements\r\n if (el.length) {\r\n var els = [];\r\n for (var i = 0; i < el.length; i++) {\r\n els.push(wrapElementHelper(el[i]));\r\n }\r\n return els;\r\n \r\n // el is a single element\r\n } else {\r\n return wrapElementHelper(el);\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Find element by tag name, then attribute value.\r\n */\r\nvar tagAttrVal = function (el, tag, attr, value) {\r\n el = el.getElementsByTagName(tag);\r\n for (var i = 0; i < el.length; i++) {\r\n if (el[i].getAttribute(attr) === value) {\r\n return el[i];\r\n }\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Search for a template ID, and return its parent element.\r\n * Example:\r\n * <templateId root=\"2.16.840.1.113883.10.20.22.2.17\"/>\r\n * Can be found using:\r\n * el = dom.template('2.16.840.1.113883.10.20.22.2.17');\r\n */\r\nvar template = function (templateId) {\r\n var el = tagAttrVal(this.el, 'templateId', 'root', templateId);\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el.parentNode);\r\n }\r\n};\r\n\r\n/*\r\n * Search for a content tag by \"ID\", and return it as an element.\r\n * These are used in the unstructured versions of each section but\r\n * referenced from the structured version sometimes.\r\n * Example:\r\n * <content ID=\"UniqueNameReferencedElsewhere\"/>\r\n * Can be found using:\r\n * el = dom.content('UniqueNameReferencedElsewhere');\r\n *\r\n * We can't use `getElementById` because `ID` (the standard attribute name\r\n * in this context) is not the same attribute as `id` in XML, so there are no matches\r\n */\r\nvar content = function (contentId) {\r\n var el = tagAttrVal(this.el, 'content', 'ID', contentId);\r\n if (!el) {\r\n // check the <td> tag too, which isn't really correct but\r\n // will inevitably be used sometimes because it looks like very\r\n // normal HTML to put the data directly in a <td>\r\n el = tagAttrVal(this.el, 'td', 'ID', contentId);\r\n }\r\n if (!el) {\r\n // Ugh, Epic uses really non-standard locations.\r\n el = tagAttrVal(this.el, 'caption', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'paragraph', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'tr', 'ID', contentId) ||\r\n tagAttrVal(this.el, 'item', 'ID', contentId);\r\n }\r\n\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el);\r\n }\r\n };\r\n\r\n\r\n/*\r\n * Search for the first occurrence of an element by tag name.\r\n */\r\nvar tag = function (tag) {\r\n var el = this.el.getElementsByTagName(tag)[0];\r\n if (!el) {\r\n return emptyEl();\r\n } else {\r\n return wrapElement(el);\r\n }\r\n};\r\n\r\n/*\r\n * Like `tag`, except it will only count a tag that is an immediate child of `this`.\r\n * This is useful for tags like \"text\" which A. may not be present for a given location\r\n * in every document and B. have a very different meaning depending on their positioning\r\n *\r\n * <parent>\r\n * <target></target>\r\n * </parent>\r\n * vs.\r\n * <parent>\r\n * <intermediate>\r\n * <target></target>\r\n * </intermediate>\r\n * </parent>\r\n * parent.immediateChildTag('target') will have a result in the first case but not in the second.\r\n */\r\nvar immediateChildTag = function (tag) {\r\n var els = this.el.getElementsByTagName(tag);\r\n if (!els) { return null; }\r\n for (var i = 0; i < els.length; i++) {\r\n if (els[i].parentNode === this.el) {\r\n return wrapElement(els[i]);\r\n }\r\n }\r\n return emptyEl();\r\n};\r\n\r\n\r\n/*\r\n * Search for all elements by tag name.\r\n */\r\nvar elsByTag = function (tag) {\r\n return wrapElement(this.el.getElementsByTagName(tag));\r\n};\r\n\r\n\r\nvar unescapeSpecialChars = function(s) {\r\n if (!s) { return s; }\r\n return s.replace(/\\</g, '<')\r\n .replace(/\\>/g, '>')\r\n .replace(/\\"/g, '\"')\r\n .replace(/\\'/g, \"'\")\r\n .replace(/\\&/g, '&');\r\n};\r\n\r\n\r\n/*\r\n * Retrieve the element's attribute value. Example:\r\n * value = el.attr('displayName');\r\n *\r\n * The browser and jsdom return \"null\" for empty attributes;\r\n * xmldom (which we now use because it's faster / can be explicitly\r\n * told to parse malformed XML as XML anyways), return the empty\r\n * string instead, so we fix that here.\r\n */\r\nvar attr = function (attrName) {\r\n if (!this.el) { return null; }\r\n var attrVal = this.el.getAttribute(attrName);\r\n if (attrVal) {\r\n return unescapeSpecialChars(attrVal);\r\n }\r\n return null;\r\n};\r\n\r\n/*\r\n * Wrapper for attr() for retrieving boolean attributes;\r\n * a raw call attr() will return Strings, which can be unexpected,\r\n * since the string 'false' will by truthy\r\n */\r\nvar boolAttr = function (attrName) {\r\n var rawAttr = this.attr(attrName);\r\n if (rawAttr === 'true' || rawAttr === '1') {\r\n return true;\r\n }\r\n return false;\r\n};\r\n\r\n/*\r\n * Retrieve the element's value. For example, if the element is:\r\n * <city>Madison</city>\r\n * Use:\r\n * value = el.tag('city').val();\r\n *\r\n * This function also knows how to retrieve the value of <reference> tags,\r\n * which can store their content in a <content> tag in a totally different\r\n * part of the document.\r\n */\r\nvar val = function (html) {\r\n if (!this.el) { return null; }\r\n if (!this.el.childNodes || !this.el.childNodes.length) { return null; }\r\n \r\n var textContent;\r\n if (html) {\r\n textContent = this.el.innerHTML;\r\n if (!textContent && root.XMLSerializer)\r\n textContent = new XMLSerializer().serializeToString(this.el);\r\n } else {\r\n textContent = this.el.textContent;\r\n }\r\n\r\n // if there's no text value here and the only thing inside is a\r\n // <reference> tag, see if there's a linked <content> tag we can\r\n // get something out of\r\n if (!stripWhitespace(textContent)) {\r\n\r\n var contentId;\r\n // \"no text value\" might mean there's just a reference tag\r\n if (this.el.childNodes.length === 1 &&\r\n this.el.childNodes[0].tagName === 'reference') {\r\n contentId = this.el.childNodes[0].getAttribute('value');\r\n\r\n // or maybe a newlines on top/above the reference tag\r\n } else if (this.el.childNodes.length === 3 &&\r\n this.el.childNodes[1].tagName === 'reference') {\r\n contentId = this.el.childNodes[1].getAttribute('value');\r\n\r\n } else {\r\n return unescapeSpecialChars(textContent);\r\n }\r\n\r\n if (contentId && contentId[0] === '#') {\r\n contentId = contentId.slice(1); // get rid of the '#'\r\n var docRoot = wrapElement(this.el.ownerDocument);\r\n var contentTag = docRoot.content(contentId);\r\n return contentTag.val();\r\n }\r\n }\r\n\r\n return unescapeSpecialChars(textContent);\r\n};\r\n\r\n\r\n/*\r\n * Creates and returns an empty DOM element with tag name \"empty\":\r\n * <empty></empty>\r\n */\r\nvar emptyEl = function () {\r\n var el = doc.createElement('empty');\r\n return wrapElement(el);\r\n};\r\n\r\n\r\n/*\r\n * Determines if the element is empty, i.e.:\r\n * <empty></empty>\r\n * This element is created by function `emptyEL`.\r\n */\r\nvar isEmpty = function () {\r\n if (this.el.tagName.toLowerCase() === 'empty') {\r\n return true;\r\n } else {\r\n return false;\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Cross-browser XML parsing supporting IE8+ and Node.js.\r\n */\r\nfunction parse(data) {\r\n // XML data must be a string\r\n if (!data || typeof data !== \"string\") {\r\n console.log(\"BB Error: XML data is not a string\");\r\n return null;\r\n }\r\n \r\n var xml, parser;\r\n \r\n // Node\r\n if (isNode) {\r\n parser = new (xmldom.DOMParser)();\r\n xml = parser.parseFromString(data, \"text/xml\");\r\n \r\n // Browser\r\n } else {\r\n \r\n // Standard parser\r\n if (window.DOMParser) {\r\n parser = new DOMParser();\r\n xml = parser.parseFromString(data, \"text/xml\");\r\n \r\n // IE\r\n } else {\r\n try {\r\n xml = new ActiveXObject(\"Microsoft.XMLDOM\");\r\n xml.async = \"false\";\r\n xml.loadXML(data);\r\n } catch (e) {\r\n console.log(\"BB ActiveX Exception: Could not parse XML\");\r\n }\r\n }\r\n }\r\n \r\n if (!xml || !xml.documentElement || xml.getElementsByTagName(\"parsererror\").length) {\r\n console.log(\"BB Error: Could not parse XML\");\r\n return null;\r\n }\r\n \r\n return wrapElement(xml);\r\n};\r\n\r\n\r\n// Establish the root object, `window` in the browser, or `global` in Node.\r\nvar root = window || global,\r\n xmldom,\r\n isNode = false,\r\n doc = root.document; // Will be `undefined` if we're in Node\r\n\r\n// Check if we're in Node. If so, pull in `xmldom` so we can simulate the DOM.\r\nif (typeof process === 'object' && Object.prototype.toString.call(process) === '[object process]') {\r\n isNode = true;\r\n xmldom = require(\"@xmldom/xmldom\");\r\n doc = new xmldom.DOMImplementation().createDocument();\r\n}\r\n\r\nmodule.exports = {\r\n parse: parse\r\n};\r\n","/*\r\n * ...\r\n */\r\nvar C32 = require('./documents/c32');\r\nvar CCD = require('./documents/ccd');\r\nvar CCDA = require('./documents/ccda');\r\nvar CCDAR2 = require('./documents/ccdar2');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n\r\n self.detect = detect;\r\n self.entries = entries;\r\n self.parseDate = parseDate;\r\n self.parseName = parseName;\r\n self.parseAddress = parseAddress;\r\n self.C32 = new C32(getEntries);\r\n self.CCD = new CCD(getEntries);\r\n self.CCDA = new CCDA(getEntries);\r\n self.CCDAR2 = new CCDAR2(getEntries);\r\n};\r\n\r\nfunction getEntries() {\r\n return entries;\r\n};\r\n\r\nfunction detect(data) {\r\n if (!data.template) {\r\n return 'json';\r\n }\r\n \r\n if (!data.template('2.16.840.1.113883.3.88.11.32.1').isEmpty()) {\r\n return 'c32';\r\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.1').isEmpty()) {\r\n return 'ccda';\r\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.15').isEmpty()) {\r\n return 'ccdar2';\r\n }else if(!data.template('2.16.840.1.113883.10.20.22.1.2').isEmpty()) {\r\n return 'ccd';\r\n }\r\n};\r\n\r\n\r\n/*\r\n * Get entries within an element (with tag name 'entry'), adds an `each` function\r\n */\r\nfunction entries() {\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n \r\n var els = this.elsByTag('entry');\r\n els.each = each;\r\n return els;\r\n};\r\n\r\n\r\n/*\r\n * Parses an HL7 date in String form and creates a new Date object.\r\n * \r\n * TODO: CCDA dates can be in form:\r\n * <effectiveTime value=\"20130703094812\"/>\r\n * ...or:\r\n * <effectiveTime>\r\n * <low value=\"19630617120000\"/>\r\n * <high value=\"20110207100000\"/>\r\n * </effectiveTime>\r\n * For the latter, parseDate will not be given type `String`\r\n * and will return `null`.\r\n */\r\nfunction parseDate(str) {\r\n if (!str || typeof str !== 'string') {\r\n return null;\r\n }\r\n\r\n // Note: months start at 0 (so January is month 0)\r\n\r\n // e.g., value=\"1999\" translates to Jan 1, 1999\r\n if (str.length === 4) {\r\n return new Date(str, 0, 1);\r\n }\r\n\r\n var year = str.substr(0, 4);\r\n // subtract 1 from the month since they're zero-indexed\r\n var month = parseInt(str.substr(4, 2), 10) - 1;\r\n // days are not zero-indexed. If we end up with the day 0 or '',\r\n // that will be equivalent to the last day of the previous month\r\n var day = str.substr(6, 2) || 1;\r\n\r\n // check for time info (the presence of at least hours and mins after the date)\r\n if (str.length >= 12) {\r\n var hour = str.substr(8, 2);\r\n var min = str.substr(10, 2);\r\n var secs = str.substr(12, 2);\r\n\r\n // check for timezone info (the presence of chars after the seconds place)\r\n if (str.length > 14) {\r\n // _utcOffsetFromString will return 0 if there's no utc offset found.\r\n var utcOffset = _utcOffsetFromString(str.substr(14));\r\n // We subtract that offset from the local time to get back to UTC\r\n // (e.g., if we're -480 mins behind UTC, we add 480 mins to get back to UTC)\r\n min = _toInt(min) - utcOffset;\r\n }\r\n\r\n var date = new Date(Date.UTC(year, month, day, hour, min, secs));\r\n // This flag lets us output datetime-precision in our JSON even if the time happens\r\n // to translate to midnight local time. If we clone the date object, it is not\r\n // guaranteed to survive.\r\n date._parsedWithTimeData = true;\r\n return date;\r\n }\r\n\r\n return new Date(year, month, day);\r\n};\r\n\r\n// These regexes and the two functions below are copied from moment.js\r\n// http://momentjs.com/\r\n// https://github.com/moment/moment/blob/develop/LICENSE\r\nvar parseTimezoneChunker = /([\\+\\-]|\\d\\d)/gi;\r\nvar parseTokenTimezone = /Z|[\\+\\-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\r\nfunction _utcOffsetFromString(string) {\r\n string = string || '';\r\n var possibleTzMatches = (string.match(parseTokenTimezone) || []),\r\n tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],\r\n parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],\r\n minutes = +(parts[1] * 60) + _toInt(parts[2]);\r\n\r\n return parts[0] === '+' ? minutes : -minutes;\r\n}\r\nfunction _toInt(argumentForCoercion) {\r\n var coercedNumber = +argumentForCoercion,\r\n value = 0;\r\n\r\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\r\n if (coercedNumber >= 0) {\r\n value = Math.floor(coercedNumber);\r\n } else {\r\n value = Math.ceil(coercedNumber);\r\n }\r\n }\r\n\r\n return value;\r\n}\r\n\r\n\r\n/*\r\n * Parses an HL7 name (prefix / given [] / family)\r\n */\r\nfunction parseName(nameEl) {\r\n var prefix = nameEl.tag('prefix').val();\r\n \r\n var els = nameEl.elsByTag('given');\r\n var given = [];\r\n for (var i = 0; i < els.length; i++) {\r\n var val = els[i].val();\r\n if (val) { given.push(val); }\r\n }\r\n \r\n var family = nameEl.tag('family').val();\r\n \r\n return {\r\n prefix: prefix,\r\n given: given,\r\n family: family\r\n };\r\n};\r\n\r\n\r\n/*\r\n * Parses an HL7 address (streetAddressLine [], city, state, postalCode, country)\r\n */\r\nfunction parseAddress(addrEl) {\r\n var els = addrEl.elsByTag('streetAddressLine');\r\n var street = [];\r\n \r\n for (var i = 0; i < els.length; i++) {\r\n var val = els[i].val();\r\n if (val) { street.push(val); }\r\n }\r\n \r\n var city = addrEl.tag('city').val(),\r\n state = addrEl.tag('state').val(),\r\n zip = addrEl.tag('postalCode').val(),\r\n country = addrEl.tag('country').val();\r\n \r\n return {\r\n street: street,\r\n city: city,\r\n state: state,\r\n zip: zip,\r\n country: country\r\n };\r\n};\r\n","/*\r\n * ...\r\n */\r\n \r\nmodule.exports = function(getEntries) {\r\n var self = this;\r\n\r\n self.getEntries = getEntries;\r\n self.process = process;\r\n self.section = section;\r\n\r\n /*\r\n * Preprocesses the C32 document\r\n */\r\n function process(c32) {\r\n c32.section = section;\r\n return c32;\r\n };\r\n\r\n /*\r\n * Finds the section of a C32 document\r\n *\r\n * Usually we check first for the HITSP section ID and then for the HL7-CCD ID.\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n \r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.3.88.11.32.1');\r\n case 'allergies':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.102');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.2');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.3.88.11.32.1');\r\n case 'encounters':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.127');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.3');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'immunizations':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.117');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.6');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'results':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.122');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.14');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'medications':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.112');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.8');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'problems':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.103');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.11');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'procedures':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.108');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.12');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'vitals':\r\n el = this.template('2.16.840.1.113883.3.88.11.83.119');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.1.16');\r\n }\r\n el.entries = entries;\r\n return el;\r\n }\r\n \r\n return null;\r\n };\r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n self.getEntries = getEntries;\r\n\r\n self.process = process;\r\n self.section = section;\r\n\r\n /*\r\n * Preprocesses the CCDAR2 document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n };\r\n\r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n\r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.2');\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.2');\r\n case 'health_concerns_document':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\r\n el.entries = entries;\r\n return el;\r\n case 'goals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\r\n el.entries = entries;\r\n return el;\r\n case 'interventions':\r\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\r\n el.entries = entries;\r\n return el;\r\n case 'health_status_outcomes':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\r\n el.entries = entries;\r\n return el;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n\r\n self.getEntries = getEntries;\r\n self.process = process;\r\n self.section = section;\r\n \r\n /*\r\n * Preprocesses the CCDA document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n }; \r\n \r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n \r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.1');\r\n case 'allergies':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.6.1');\r\n el.entries = entries;\r\n return el;\r\n case 'care_plan':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.10');\r\n el.entries = entries;\r\n return el;\r\n case 'chief_complaint':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.13');\r\n if (el.isEmpty()) {\r\n el = this.template('1.3.6.1.4.1.19376.1.5.3.1.1.13.2.1');\r\n }\r\n // no entries in Chief Complaint\r\n return el;\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.1');\r\n case 'encounters':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.22');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.22.1');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'functional_statuses':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.14');\r\n el.entries = entries;\r\n return el;\r\n case 'immunizations':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.2.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.2');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'instructions':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.45');\r\n el.entries = entries;\r\n return el;\r\n case 'results':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.3.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.3');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'medications':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.1.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.1');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'problems':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.5.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.5');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'procedures':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.7.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.7');\r\n }\r\n el.entries = entries;\r\n return el;\r\n case 'social_history':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.17');\r\n el.entries = entries;\r\n return el;\r\n case 'vitals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.4.1');\r\n if (el.isEmpty()) {\r\n el = this.template('2.16.840.1.113883.10.20.22.2.4');\r\n }\r\n el.entries = entries;\r\n return el;\r\n }\r\n \r\n return null;\r\n }; \r\n};\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = function (getEntries) {\r\n var self = this;\r\n self.getEntries = getEntries;\r\n \r\n self.process = process;\r\n self.section = section; \r\n\r\n /*\r\n * Preprocesses the CCDAR2 document\r\n */\r\n function process(ccda) {\r\n ccda.section = section;\r\n return ccda;\r\n };\r\n\r\n /*\r\n * Finds the section of a CCDA document\r\n */\r\n function section(name) {\r\n var el, entries = self.getEntries();\r\n\r\n switch (name) {\r\n case 'document':\r\n return this.template('2.16.840.1.113883.10.20.22.1.15');\r\n case 'demographics':\r\n return this.template('2.16.840.1.113883.10.20.22.1.15');\r\n case 'health_concerns_document':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\r\n el.entries = entries;\r\n return el;\r\n case 'goals':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\r\n el.entries = entries;\r\n return el;\r\n case 'interventions':\r\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\r\n el.entries = entries;\r\n return el;\r\n case 'health_status_outcomes':\r\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\r\n el.entries = entries;\r\n return el;\r\n }\r\n\r\n return null;\r\n };\r\n}\r\n","/*\r\n * ...\r\n */\r\n\r\nvar C32 = require('./generators/c32');\r\nvar CCDA = require('./generators/ccda');\r\n\r\nvar method = function () {};\r\n\r\n/* exported Generators */\r\nmodule.exports = {\r\n method: method,\r\n C32: C32,\r\n CCDA: CCDA\r\n};\r\n \r\n\r\n\r\n /* Import ejs if we're in Node. Then setup custom formatting filters\r\n */\r\n /*if (typeof exports !== 'undefined') {\r\n if (typeof module !== 'undefined' && module.exports) {\r\n ejs = require(\"ejs\");\r\n }\r\n }\r\n\r\n if (typeof ejs !== 'undefined') {\r\n /* Filters are automatically available to ejs to be used like \"... | hl7Date\"\r\n * Helpers are functions that we'll manually pass in to ejs.\r\n * The intended distinction is that a helper gets called with regular function-call syntax\r\n */ /*\r\n var pad = function(number) {\r\n if (number < 10) {\r\n return '0' + number;\r\n }\r\n return String(number);\r\n };\r\n\r\n ejs.filters.hl7Date = function(obj) {\r\n try {\r\n if (obj === null || obj === undefined) { return 'nullFlavor=\"UNK\"'; }\r\n var date = new Date(obj);\r\n if (isNaN(date.getTime())) { return obj; }\r\n\r\n var dateStr = null;\r\n if (date.getHours() || date.getMinutes() || date.getSeconds()) {\r\n // If there's a meaningful time, output a UTC datetime\r\n dateStr = date.getUTCFullYear() +\r\n pad( date.getUTCMonth() + 1 ) +\r\n pad( date.getUTCDate() );\r\n var timeStr = pad( date.getUTCHours() ) +\r\n pad( date.getUTCMinutes() ) +\r\n pad ( date.getUTCSeconds() ) +\r\n \"+0000\";\r\n return 'value=\"' + dateStr + timeStr + '\"';\r\n \r\n } else {\r\n // If there's no time, don't apply timezone tranformations: just output a date\r\n dateStr = String(date.getFullYear()) +\r\n pad( date.getMonth() + 1 ) +\r\n pad( date.getDate() );\r\n return 'value=\"' + dateStr + '\"';\r\n }\r\n\r\n } catch (e) {\r\n return obj;\r\n }\r\n };\r\n\r\n var escapeSpecialChars = function(s) {\r\n return s.replace(/</g, '<')\r\n .replace(/>/g, '>')\r\n .replace(/&/g, '&')\r\n .replace(/\"/g, '"')\r\n .replace(/'/g, ''');\r\n };\r\n\r\n ejs.filters.hl7Code = function(obj) {\r\n if (!obj) { return ''; }\r\n\r\n var tag = '';\r\n var name = obj.name || '';\r\n if (obj.name) { tag += 'displayName=\"'+escapeSpecialChars(name)+'\"'; }\r\n\r\n if (obj.code) {\r\n tag += ' code=\"'+obj.code+'\"';\r\n if (obj.code_system) { tag += ' codeSystem=\"'+escapeSpecialChars(obj.code_system)+'\"'; }\r\n if (obj.code_system_name) { tag += ' codeSystemName=\"' +\r\n escapeSpecialChars(obj.code_system_name)+'\"'; }\r\n } else {\r\n tag += ' nullFlavor=\"UNK\"';\r\n }\r\n\r\n if (!obj.name && ! obj.code) {\r\n return 'nullFlavor=\"UNK\"';\r\n }\r\n \r\n return tag;\r\n };\r\n\r\n ejs.filters.emptyStringIfFalsy = function(obj) {\r\n if (!obj) { return ''; }\r\n return obj;\r\n };\r\n\r\n if (!ejs.helpers) ejs.helpers = {};\r\n ejs.helpers.simpleTag = function(tagName, value) {\r\n if (value) {\r\n return \"<\"+tagName+\">\"+value+\"</\"+tagName+\">\";\r\n } else {\r\n return \"<\"+tagName+\" nullFlavor=\\\"UNK\\\" />\";\r\n }\r\n };\r\n\r\n ejs.helpers.addressTags = function(addressDict) {\r\n if (!addressDict) {\r\n return '<streetAddressLine nullFlavor=\"NI\" />\\n' +\r\n '<city nullFlavor=\"NI\" />\\n' +\r\n '<state nullFlavor=\"NI\" />\\n' +\r\n '<postalCode nullFlavor=\"NI\" />\\n' +\r\n '<country nullFlavor=\"NI\" />\\n';\r\n }\r\n \r\n var tags = '';\r\n if (!addressDict.street.length) {\r\n tags += ejs.helpers.simpleTag('streetAddressLine', null) + '\\n';\r\n } else {\r\n for (var i=0; i<addressDict.street.length; i++) {\r\n tags += ejs.helpers.simpleTag('streetAddressLine', addressDict.street[i]) + '\\n';\r\n }\r\n }\r\n tags += ejs.helpers.simpleTag('city', addressDict.city) + '\\n';\r\n tags += ejs.helpers.simpleTag('state', addressDict.state) + '\\n';\r\n tags += ejs.helpers.simpleTag('postalCode', addressDict.zip) + '\\n';\r\n tags += ejs.helpers.simpleTag('country', addressDict.country) + '\\n';\r\n return tags;\r\n };\r\n\r\n ejs.helpers.nameTags = function(nameDict) {\r\n if (!nameDict) {\r\n return '<given nullFlavor=\"NI\" />\\n' +\r\n '<family nullFlavor=\"NI\" />\\n';\r\n }\r\n\r\n var tags = '';\r\n if (nameDict.prefix) {\r\n tags += ejs.helpers.simpleTag('prefix', nameDict.prefix) + '\\n';\r\n }\r\n if (!nameDict.given.length) {\r\n tags += ejs.helpers.simpleTag('given', null) + '\\n';\r\n } else {\r\n for (var i=0; i<nameDict.given.length; i++) {\r\n tags += ejs.helpers.simpleTag('given', nameDict.given[i]) + '\\n';\r\n }\r\n }\r\n tags += ejs.helpers.simpleTag('family', nameDict.family) + '\\n';\r\n if (nameDict.suffix) {\r\n tags += ejs.helpers.simpleTag('suffix', nameDict.suffix) + '\\n';\r\n }\r\n return tags;\r\n };\r\n\r\n }*/\r\n","/*\r\n * ...\r\n */\r\n\r\nmodule.exports = {\r\n run: run\r\n};\r\n \r\n/*\r\n * Generates a C32 document\r\n */\r\nfunction run(json, template, testingMode) {\r\n /* jshint unused: false */ // only until this stub is actually implemented\r\n console.log(\"C32 generation is not implemented yet\");\r\n return null;\r\n};","/*\r\n * ...\r\n */\r\nvar _ = require('lodash');\r\n\r\nmodule.exports = {\r\n run: run\r\n};\r\n \r\n/*\r\n * Generates a CCDA document\r\n * A lot of the EJS setup happens in generators.js\r\n *\r\n * If `testingMode` is true, we'll set the \"now\" variable to a specific,\r\n * fixed time, so that the expected XML doesn't change across runs\r\n */\r\nfunction run(json, template, testingMode) {\r\n if (!template) {\r\n console.log(\"Please provide a template EJS file for the Generator to use. \" +\r\n \"Load it via fs.readFileSync in Node or XHR in the browser.\");\r\n return null;\r\n }\r\n\r\n // `now` is actually now, unless we're running this for a test,\r\n // in which case it's always Jan 1, 2000 at 12PM UTC\r\n var now = (testingMode) ?\r\n new Date('2000-01-01T12:00:00Z') : new Date();\r\n\r\n var ccda = _.template(template, {\r\n filename: 'ccda.xml',\r\n bb: json,\r\n now: now,\r\n tagHelpers: ejs.helpers,\r\n codes: Core.Codes\r\n });\r\n return ccda;\r\n};","/*\r\n * ...\r\n */\r\nvar C32 = require('./parsers/c32');\r\nvar CCD = require('./parsers/ccd');\r\nvar CCDA = require('./parsers/ccda');\r\nvar CCDAR2 = require('./parsers/ccdar2');\r\n\r\nvar method = function () {};\r\n\r\n/* exported Parsers */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.method = method;\r\n self.C32 = new C32(self.doc);\r\n self.CCD = new CCD(self.doc);\r\n self.CCDA = new CCDA(self.doc);\r\n self.CCDAR2 = new CCDAR2(self.doc);\r\n}; ","/*\r\n * Parser for the C32 document\r\n */\r\n\r\nvar Core = require('../core');\r\nvar AllergiesParser = require('./c32/allergies');\r\nvar DemographicsParser = require('./c32/demographics');\r\nvar DocumentParser = require('./c32/document');\r\nvar EncountersParser = require('./c32/encounters');\r\nvar ImmunizationsParser = require('./c32/immunizations');\r\nvar MedicationsParser = require('./c32/medications');\r\nvar ProblemsParser = require('./c32/problems');\r\nvar ProceduresParser = require('./c32/procedures');\r\nvar ResultsParser = require('./c32/results');\r\nvar VitalsParser = require('./c32/vitals');\r\nvar ParseGenericInfo = require('./generic');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n\r\n self.doc = doc;\r\n self.allergiesParser = new AllergiesParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.demographicsParser = new DocumentParser(self.doc);\r\n self.encountersParser = new EncountersParser(self.doc);\r\n self.immunizationsParser = new ImmunizationsParser(self.doc);\r\n self.medicationsParser = new MedicationsParser(self.doc);\r\n self.problemsParser = new ProblemsParser(self.doc);\r\n self.proceduresParser = new ProceduresParser(self.doc);\r\n self.resultsParser = new ResultsParser(self.doc);\r\n self.vitalsParser = new VitalsParser(self.doc);\r\n\r\n self.run = function (c32) {\r\n var data = {};\r\n \r\n data.document = self.demographicsParser.parse(c32);\r\n data.allergies = self.allergiesParser.parse(c32);\r\n data.demographics = self.demographicsParser.parse(c32);\r\n data.encounters = self.encountersParser.parse(c32);\r\n var parsedImmunizations = self.immunizationsParser.parse(c32);\r\n data.immunizations = parsedImmunizations.administered;\r\n data.immunization_declines = parsedImmunizations.declined;\r\n data.results = self.resultsParser.parse(c32);\r\n data.medications = self.medicationsParser.parse(c32);\r\n data.problems = self.problemsParser.parse(c32);\r\n data.procedures = self.proceduresParser.parse(c32);\r\n data.vitals = self.vitals.parse(c32);\r\n \r\n data.json = Core.json;\r\n data.document.json = Core.json;\r\n data.allergies.json = Core.json;\r\n data.demographics.json = Core.json;\r\n data.encounters.json = Core.json;\r\n data.immunizations.json = Core.json;\r\n data.immunization_declines.json = Core.json;\r\n data.results.json = Core.json;\r\n data.medications.json = Core.json;\r\n data.problems.json = Core.json;\r\n data.procedures.json = Core.json;\r\n data.vitals.json = Core.json;\r\n \r\n // Sections that are in CCDA but not C32... we want to keep the API\r\n // consistent, even if the entries are always null\r\n data.smoking_status = {\r\n date: null,\r\n name: null,\r\n code: null,\r\n code_system: null,\r\n code_system_name: null\r\n };\r\n data.smoking_status.json = Core.json;\r\n \r\n data.chief_complaint = {\r\n text: null\r\n };\r\n data.chief_complaint.json = Core.json;\r\n \r\n data.care_plan = [];\r\n data.care_plan.json = Core.json;\r\n \r\n data.instructions = [];\r\n data.instructions.json = Core.json;\r\n \r\n data.functional_statuses = [];\r\n data.functional_statuses.json = Core.json;\r\n \r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(c32, data);\r\n \r\n return data;\r\n };\r\n};\r\n\r\n\r\n","/*\r\n * Parser for the C32 allergies section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var allergies = c32.section('allergies');\r\n\r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Allergies\";\r\n data.templateId = allergies.tag('templateId').attr('root');\r\n data.text = allergies.tag('text').val(true);\r\n\r\n allergies.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // value => reaction_type\r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('value');\r\n var reaction_type_name = el.attr('displayName'),\r\n reaction_type_code = el.attr('code'),\r\n reaction_type_code_system = el.attr('codeSystem'),\r\n reaction_type_code_system_name = el.attr('codeSystemName');\r\n \r\n // reaction\r\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('value');\r\n var reaction_name = el.attr('displayName'),\r\n reaction_code = el.attr('code'),\r\n reaction_code_system = el.attr('codeSystem');\r\n \r\n // an irregularity seen in some c32s\r\n if (!reaction_name) {\r\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('text');\r\n if (!el.isEmpty()) {\r\n reaction_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n\r\n // severity\r\n el = entry.template('2.16.840.1.113883.10.20.1.55').tag('value');\r\n var severity = el.attr('displayName');\r\n \r\n // participant => allergen\r\n el = entry.tag('participant').tag('code');\r\n var allergen_name = el.attr('displayName'),\r\n allergen_code = el.attr('code'),\r\n allergen_code_system = el.attr('codeSystem'),\r\n allergen_code_system_name = el.attr('codeSystemName');\r\n\r\n // another irregularity seen in some c32s\r\n if (!allergen_name) {\r\n el = entry.tag('participant').tag('name');\r\n if (!el.isEmpty()) {\r\n allergen_name = el.val();\r\n }\r\n }\r\n if (!allergen_name) {\r\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('originalText');\r\n if (!el.isEmpty()) {\r\n allergen_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n // status\r\n el = entry.template('2.16.840.1.113883.10.20.1.39').tag('value');\r\n var status = el.attr('displayName');\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n status: status,\r\n severity: severity,\r\n reaction: {\r\n name: reaction_name,\r\n code: reaction_code,\r\n code_system: reaction_code_system\r\n },\r\n reaction_type: {\r\n name: reaction_type_name,\r\n code: reaction_type_code,\r\n code_system: reaction_type_code_system,\r\n code_system_name: reaction_type_code_system_name\r\n },\r\n allergen: {\r\n name: allergen_name,\r\n code: allergen_code,\r\n code_system: allergen_code_system,\r\n code_system_name: allergen_code_system_name\r\n }\r\n });\r\n }); \r\n return data;\r\n }\r\n};\r\n","/*\r\n * Parser for the C32 demographics section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var demographics = c32.section('demographics');\r\n \r\n var patient = demographics.tag('patientRole');\r\n el = patient.tag('patient').tag('name');\r\n var patient_name_dict = parseName(el);\r\n \r\n el = patient.tag('patient');\r\n var dob = parseDate(el.tag('birthTime').attr('value')),\r\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\r\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\r\n \r\n el = patient.tag('addr');\r\n var patient_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('telecom');\r\n var home = el.attr('value'),\r\n work = null,\r\n mobile = null;\r\n \r\n var email = null;\r\n \r\n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\r\n race = patient.tag('raceCode').attr('displayName'),\r\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\r\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\r\n \r\n el = patient.tag('birthplace');\r\n var birthplace_dict = parseAddress(el);\r\n \r\n el = patient.tag('guardian');\r\n var guardian_relationship = el.tag('code').attr('displayName'),\r\n guardian_relationship_code = el.tag('code').attr('code'),\r\n guardian_home = el.tag('telecom').attr('value');\r\n \r\n el = el.tag('guardianPerson').tag('name');\r\n var guardian_name_dict = parseName(el);\r\n \r\n el = patient.tag('guardian').tag('addr');\r\n var guardian_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('providerOrganization');\r\n var provider_organization = el.tag('name').val(),\r\n provider_phone = el.tag('telecom').attr('value'),\r\n provider_address_dict = parseAddress(el.tag('addr'));\r\n \r\n data = {\r\n name: patient_name_dict,\r\n dob: dob,\r\n gender: gender,\r\n marital_status: marital_status,\r\n address: patient_address_dict,\r\n phone: {\r\n home: home,\r\n work: work,\r\n mobile: mobile\r\n },\r\n email: email,\r\n language: language,\r\n race: race,\r\n ethnicity: ethnicity,\r\n religion: religion,\r\n birthplace: {\r\n state: birthplace_dict.state,\r\n zip: birthplace_dict.zip,\r\n country: birthplace_dict.country\r\n },\r\n guardian: {\r\n name: {\r\n given: guardian_name_dict.given,\r\n family: guardian_name_dict.family\r\n },\r\n relationship: guardian_relationship,\r\n relationship_code: guardian_relationship_code,\r\n address: guardian_address_dict,\r\n phone: {\r\n home: guardian_home\r\n }\r\n },\r\n provider: {\r\n organization: provider_organization,\r\n phone: provider_phone,\r\n address: provider_address_dict\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 document section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = c32.section('document');\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n \r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n // Sometimes C32s include names that are just like <name>String</name>\r\n // and we still want to get something out in that case\r\n if (!name_dict.prefix && !name_dict.given.length && !name_dict.family) {\r\n name_dict.family = el.val();\r\n }\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i].tag('assignedPerson').tag('name');\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = performers[i].tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the C32 encounters section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var encounters = c32.section('encounters');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Encounters\";\r\n data.templateId = encounters.tag('templateId').attr('root');\r\n data.text = encounters.tag('text').val(true);\r\n \r\n encounters.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!date) {\r\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName'),\r\n code_system_version = el.attr('codeSystemVersion');\r\n \r\n // translation\r\n el = entry.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer\r\n el = entry.tag('performer');\r\n var performer_name = el.tag('name').val(),\r\n performer_code = el.attr('code'),\r\n performer_code_system = el.attr('codeSystem'),\r\n performer_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant => location\r\n el = entry.tag('participant');\r\n var organization = el.tag('name').val(),\r\n location_dict = parseAddress(el);\r\n location_dict.organization = organization;\r\n \r\n // findings\r\n var findings = [];\r\n var findingEls = entry.elsByTag('entryRelationship');\r\n for (var i = 0; i < findingEls.length; i++) {\r\n el = findingEls[i].tag('value');\r\n findings.push({\r\n name: el.attr('displayName'),\r\n code: el.attr('code'),\r\n code_system: el.attr('codeSystem')\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n code_system_version: code_system_version,\r\n findings: findings,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n performer: {\r\n name: performer_name,\r\n code: performer_code,\r\n code_system: performer_code_system,\r\n code_system_name: performer_code_system_name\r\n },\r\n location: location_dict\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 immunizations section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var administeredData = {}, declinedData = {}, product, el;\r\n \r\n var immunizations = c32.section('immunizations');\r\n \r\n administeredData.entries = [];\r\n administeredData.displayName = \"Immunizations\";\r\n administeredData.templateId = immunizations.tag('templateId').attr('root');\r\n administeredData.text = immunizations.tag('text').val(true);\r\n \r\n declinedData.entries = [];\r\n declinedData.displayName = \"Immunizations Declined\";\r\n declinedData.templateId = immunizations.tag('templateId').attr('root');\r\n declinedData.text = immunizations.tag('text').val(true);\r\n \r\n \r\n \r\n immunizations.entries().each(function(entry) {\r\n \r\n // date\r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n if (!date) {\r\n date = parseDate(el.tag('low').attr('value'));\r\n }\r\n \r\n // if 'declined' is true, this is a record that this vaccine WASN'T administered\r\n el = entry.tag('substanceAdministration');\r\n var declined = el.boolAttr('negationInd');\r\n \r\n // product\r\n product = entry.template('2.16.840.1.113883.10.20.1.53');\r\n el = product.tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem'),\r\n product_code_system_name = el.attr('codeSystemName');\r\n \r\n // translation\r\n el = product.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // misc product details\r\n el = product.tag('lotNumberText');\r\n var lot_number = el.val();\r\n \r\n el = product.tag('manufacturerOrganization');\r\n var manufacturer_name = el.tag('name').val();\r\n \r\n // route\r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // instructions\r\n el = entry.template('2.16.840.1.113883.10.20.1.49');\r\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\r\n el = el.tag('code');\r\n var education_name = el.attr('displayName'),\r\n education_code = el.attr('code'),\r\n education_code_system = el.attr('codeSystem');\r\n \r\n // dose\r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n var data = (declined) ? declinedData : administeredData;\r\n data.entries.push({\r\n date: date,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n code_system_name: product_code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n lot_number: lot_number,\r\n manufacturer_name: manufacturer_name\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n instructions: instructions_text,\r\n education_type: {\r\n name: education_name,\r\n code: education_code,\r\n code_system: education_code_system\r\n }\r\n });\r\n });\r\n \r\n return {\r\n administered: administeredData,\r\n declined: declinedData\r\n };\r\n };\r\n}\r\n","var Core = require('../../core');\r\n\r\n/*\r\n * Parser for the C32 medications section\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n \r\n function parse(c32) { \r\n var parseDate = self.doc.parseDate;\r\n var medications = c32.section('medications');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Medications\";\r\n data.templateId = medications.tag('templateId').attr('root');\r\n data.text = medications.tag('text').val(true);\r\n \r\n medications.entries().each(function(entry) {\r\n \r\n var text = null;\r\n el = entry.tag('substanceAdministration').immediateChildTag('text');\r\n if (!el.isEmpty()) {\r\n // technically C32s don't use this, but C83s (another CCD) do,\r\n // and CCDAs do, so we may see it anyways\r\n text = Core.stripWhitespace(el.val());\r\n }\r\n \r\n var effectiveTimes = entry.elsByTag('effectiveTime');\r\n \r\n el = effectiveTimes[0]; // the first effectiveTime is the med start date\r\n var start_date = null, end_date = null;\r\n if (el) {\r\n start_date = parseDate(el.tag('low').attr('value'));\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n }\r\n \r\n // the second effectiveTime might the schedule period or it might just\r\n // be a random effectiveTime from further in the entry... xsi:type should tell us\r\n el = effectiveTimes[1];\r\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\r\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\r\n var institutionSpecified = el.attr('institutionSpecified');\r\n if (institutionSpecified === 'true') {\r\n schedule_type= 'frequency';\r\n } else if (institutionSpecified === 'false') {\r\n schedule_type = 'interval';\r\n }\r\n \r\n el = el.tag('period');\r\n schedule_period_value = el.attr('value');\r\n schedule_period_unit = el.attr('unit');\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem');\r\n \r\n var product_original_text = null;\r\n el = entry.tag('manufacturedProduct').tag('originalText');\r\n if (!el.isEmpty()) {\r\n product_original_text = Core.stripWhitespace(el.val());\r\n }\r\n // if we don't have a product name yet, try the originalText version\r\n if (!product_name && product_original_text) {\r\n product_name = product_original_text;\r\n }\r\n \r\n // irregularity in some c32s\r\n if (!product_name) {\r\n el = entry.tag('manufacturedProduct').tag('name');\r\n if (!el.isEmpty()) {\r\n product_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n el = entry.tag('rateQuantity');\r\n var rate_quantity_value = el.attr('value'),\r\n rate_quantity_unit = el.attr('unit');\r\n \r\n el = entry.tag('precondition').tag('value');\r\n var precondition_name = el.attr('displayName'),\r\n precondition_code = el.attr('code'),\r\n precondition_code_system = el.attr('codeSystem');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\r\n var reason_name = el.attr('displayName'),\r\n reason_code = el.attr('code'),\r\n reason_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant/playingEntity => vehicle\r\n el = entry.tag('participant').tag('playingEntity');\r\n var vehicle_name = el.tag('name').val();\r\n \r\n el = el.tag('code');\r\n // prefer the code vehicle_name but fall back to the non-coded one\r\n // (which for C32s is in fact the primary field for this info)\r\n vehicle_name = el.attr('displayName') || vehicle_name;\r\n var vehicle_code = el.attr('code'),\r\n vehicle_code_system = el.attr('codeSystem'),\r\n vehicle_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('administrationUnitCode');\r\n var administration_name = el.attr('displayName'),\r\n administration_code = el.attr('code'),\r\n administration_code_system = el.attr('codeSystem'),\r\n administration_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer => prescriber\r\n el = entry.tag('performer');\r\n var prescriber_organization = el.tag('name').val(),\r\n prescriber_person = null;\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n text: text,\r\n product: {\r\n name: product_name,\r\n text: product_original_text,\r\n code: product_code,\r\n code_system: product_code_system,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n }\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n rate_quantity: {\r\n value: rate_quantity_value,\r\n unit: rate_quantity_unit\r\n },\r\n precondition: {\r\n name: precondition_name,\r\n code: precondition_code,\r\n code_system: precondition_code_system\r\n },\r\n reason: {\r\n name: reason_name,\r\n code: reason_code,\r\n code_system: reason_code_system\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n schedule: {\r\n type: schedule_type,\r\n period_value: schedule_period_value,\r\n period_unit: schedule_period_unit\r\n },\r\n vehicle: {\r\n name: vehicle_name,\r\n code: vehicle_code,\r\n code_system: vehicle_code_system,\r\n code_system_name: vehicle_code_system_name\r\n },\r\n administration: {\r\n name: administration_name,\r\n code: administration_code,\r\n code_system: administration_code_system,\r\n code_system_name: administration_code_system_name\r\n },\r\n prescriber: {\r\n organization: prescriber_organization,\r\n person: prescriber_person\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","var Core = require('../../core');\r\n\r\n/*\r\n * Parser for the C32 problems section\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var problems = c32.section('problems');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Problems\";\r\n data.templateId = problems.tag('templateId').attr('root');\r\n data.text = problems.tag('text').val(true);\r\n \r\n problems.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // Pre-C32 CCDs put the problem name in this \"originalText\" field, and some vendors\r\n // continue doing this with their C32, even though it's not technically correct\r\n if (!name) {\r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('originalText');\r\n if (!el.isEmpty()) {\r\n name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.1.50');\r\n var status = el.tag('value').attr('displayName');\r\n \r\n var age = null;\r\n el = entry.template('2.16.840.1.113883.10.20.1.38');\r\n if (!el.isEmpty()) {\r\n age = parseFloat(el.tag('value').attr('value'));\r\n }\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n status: status,\r\n age: age,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n comment: null // not part of C32\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the C32 procedures section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var procedures = c32.section('procedures');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Procedures\";\r\n data.templateId = procedures.tag('templateId').attr('root');\r\n data.text = procedures.tag('text').val(true);\r\n \r\n procedures.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(entry.tag('originalText').val());\r\n }\r\n \r\n // 'specimen' tag not always present\r\n el = entry.tag('specimen').tag('code');\r\n var specimen_name = el.attr('displayName'),\r\n specimen_code = el.attr('code'),\r\n specimen_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('performer').tag('addr');\r\n var organization = el.tag('name').val(),\r\n phone = el.tag('telecom').attr('value');\r\n \r\n var performer_dict = parseAddress(el);\r\n performer_dict.organization = organization;\r\n performer_dict.phone = phone;\r\n \r\n // participant => device\r\n el = entry.tag('participant').tag('code');\r\n var device_name = el.attr('displayName'),\r\n device_code = el.attr('code'),\r\n device_code_system = el.attr('codeSystem');\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n specimen: {\r\n name: specimen_name,\r\n code: specimen_code,\r\n code_system: specimen_code_system\r\n },\r\n performer: performer_dict,\r\n device: {\r\n name: device_name,\r\n code: device_code,\r\n code_system: device_code_system\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the C32 results (labs) section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var results = c32.section('results');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Results\";\r\n data.templateId = results.tag('templateId').attr('root');\r\n data.text = results.tag('text').val(true);\r\n \r\n \r\n results.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var panel_date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!panel_date) {\r\n panel_date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n // panel\r\n el = entry.tag('code');\r\n var panel_name = el.attr('displayName'),\r\n panel_code = el.attr('code'),\r\n panel_code_system = el.attr('codeSystem'),\r\n panel_code_system_name = el.attr('codeSystemName');\r\n \r\n var observation;\r\n var tests = entry.elsByTag('observation');\r\n var tests_data = [];\r\n \r\n for (var i = 0; i < tests.length; i++) {\r\n observation = tests[i];\r\n \r\n // sometimes results organizers contain non-results. we only want tests\r\n if (observation.template('2.16.840.1.113883.10.20.1.31').val()) {\r\n var date = parseDate(observation.tag('effectiveTime').attr('value'));\r\n \r\n el = observation.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(observation.tag('text').val());\r\n }\r\n \r\n el = observation.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = observation.tag('value');\r\n var value = el.attr('value'),\r\n unit = el.attr('unit');\r\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\r\n // not to trust that that field has been used correctly...\r\n if (value && !isNaN(parseFloat(value))) {\r\n value = parseFloat(value);\r\n }\r\n if (!value) {\r\n value = el.val(); // look for free-text values\r\n }\r\n \r\n el = observation.tag('referenceRange');\r\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\r\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\r\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\r\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\r\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\r\n \r\n tests_data.push({\r\n date: date,\r\n name: name,\r\n value: value,\r\n unit: unit,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n reference_range: {\r\n text: reference_range_text,\r\n low_unit: reference_range_low_unit,\r\n low_value: reference_range_low_value,\r\n high_unit: reference_range_high_unit,\r\n high_value: reference_range_high_value,\r\n }\r\n });\r\n }\r\n }\r\n \r\n data.entries.push({\r\n name: panel_name,\r\n code: panel_code,\r\n code_system: panel_code_system,\r\n code_system_name: panel_code_system_name,\r\n date: panel_date,\r\n tests: tests_data\r\n });\r\n });\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the C32 vitals section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.parse = parse;\r\n\r\n function parse(c32) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var vitals = c32.section('vitals');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Vitals\";\r\n data.templateId = vitals.tag('templateId').attr('root');\r\n data.text = vitals.tag('text').val(true);\r\n \r\n vitals.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var entry_date = parseDate(el.attr('value'));\r\n \r\n var result;\r\n var results = entry.elsByTag('component');\r\n var results_data = [];\r\n \r\n for (var j = 0; j < results.length; j++) {\r\n result = results[j];\r\n \r\n // Results\r\n \r\n el = result.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = result.tag('value');\r\n var value = parseFloat(el.attr('value')),\r\n unit = el.attr('unit');\r\n \r\n results_data.push({\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n value: value,\r\n unit: unit\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: entry_date,\r\n results: results_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 document\r\n */\r\n\r\nvar ParseGenericInfo = require('./generic');\r\nvar Core = require('../core');\r\nvar DocumentParser = require('./ccd/document');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\r\n \r\n self.run = function (ccda) {\r\n var data = {};\r\n\r\n data.document = self.documentParser.document(ccda);\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\r\n data.json = Core.json;\r\n\r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDAR2 document section\r\n */\r\nvar Core = require('../../core');\r\n\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.document = document;\r\n\r\n function document(ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n \r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","var Core = require('../core');\r\nvar AllergiesParser = require('./ccda/allergies');\r\nvar CarePlanParser = require('./ccda/care_plan');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar DocumentParser = require('./ccda/document');\r\nvar EncountersParser = require('./ccda/encounters');\r\nvar FreeTextParser = require('./ccda/free_text');\r\nvar FunctionalStatusesParser = require('./ccda/functional_statuses');\r\nvar ImmunizationsParser = require('./ccda/immunizations');\r\nvar InstructionsParser = require('./ccda/instructions');\r\nvar MedicationsParser = require('./ccda/medications');\r\nvar ProblemsParser = require('./ccda/problems');\r\nvar ProceduresParser = require('./ccda/procedures');\r\nvar ResultsParser = require('./ccda/results');\r\nvar SmokingStatusParser = require('./ccda/smoking_status');\r\nvar VitalsParser = require('./ccda/vitals');\r\n\r\nvar ParseGenericInfo = require('./generic');\r\n\r\n/*\r\n * Parser for the CCDA document\r\n */\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.allergiesParser = new AllergiesParser(self.doc);\r\n self.carePlanParser = new CarePlanParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.encountersParser = new EncountersParser(self.doc);\r\n self.freeTextParser = new FreeTextParser();\r\n self.functionalStatusesParser = new FunctionalStatusesParser(self.doc);\r\n self.immunizationsParser = new ImmunizationsParser(self.doc);\r\n self.instructionsParser = new InstructionsParser();\r\n self.medicationsParser = new MedicationsParser(self.doc);\r\n self.problemsParser = new ProblemsParser(self.doc);\r\n self.proceduresParser = new ProceduresParser(self.doc);\r\n self.resultsParser = new ResultsParser(self.doc);\r\n self.smokingStatusParser = new SmokingStatusParser(self.doc);\r\n self.vitalsParser = new VitalsParser(self.doc);\r\n\r\n\r\n self.run = function (ccda) {\r\n var data = {};\r\n \r\n data.document = self.documentParser.document(ccda);\r\n data.allergies = self.allergiesParser.allergies(ccda);\r\n data.care_plan = self.carePlanParser.care_plan(ccda);\r\n data.chief_complaint = self.freeTextParser.free_text(ccda, 'chief_complaint');\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.encounters = self.encountersParser.encounters(ccda);\r\n data.functional_statuses = self.functionalStatusesParser.functional_statuses(ccda);\r\n var parsedImmunizations = self.immunizationsParser.immunizations(ccda);\r\n data.immunizations = parsedImmunizations.administered;\r\n data.immunization_declines = parsedImmunizations.declined;\r\n data.instructions = self.instructionsParser.instructions(ccda);\r\n data.results = self.resultsParser.results(ccda);\r\n data.medications = self.medicationsParser.medications(ccda);\r\n data.problems = self.problemsParser.problems(ccda);\r\n data.procedures = self.proceduresParser.procedures(ccda);\r\n data.smoking_status = self.smokingStatusParser.smoking_status(ccda);\r\n data.vitals = self.vitalsParser.vitals(ccda);\r\n \r\n data.json = Core.json;\r\n data.document.json = Core.json;\r\n data.allergies.json = Core.json;\r\n data.care_plan.json = Core.json;\r\n data.chief_complaint.json = Core.json;\r\n data.demographics.json = Core.json;\r\n data.encounters.json = Core.json;\r\n data.functional_statuses.json = Core.json;\r\n data.immunizations.json = Core.json;\r\n data.immunization_declines.json = Core.json;\r\n data.instructions.json = Core.json;\r\n data.results.json = Core.json;\r\n data.medications.json = Core.json;\r\n data.problems.json = Core.json;\r\n data.procedures.json = Core.json;\r\n data.smoking_status.json = Core.json;\r\n data.vitals.json = Core.json;\r\n\r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA allergies section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n \r\n self.allergies = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var allergies = ccda.section('allergies');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Allergies\";\r\n data.templateId = allergies.tag('templateId').attr('root');\r\n data.text = allergies.tag('text').val(true);\r\n \r\n allergies.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n // value => reaction_type\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('value');\r\n var reaction_type_name = el.attr('displayName'),\r\n reaction_type_code = el.attr('code'),\r\n reaction_type_code_system = el.attr('codeSystem'),\r\n reaction_type_code_system_name = el.attr('codeSystemName');\r\n \r\n // reaction\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.9').tag('value');\r\n var reaction_name = el.attr('displayName'),\r\n reaction_code = el.attr('code'),\r\n reaction_code_system = el.attr('codeSystem');\r\n \r\n // severity\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.8').tag('value');\r\n var severity = el.attr('displayName');\r\n \r\n // participant => allergen\r\n el = entry.tag('participant').tag('code');\r\n var allergen_name = el.attr('displayName'),\r\n allergen_code = el.attr('code'),\r\n allergen_code_system = el.attr('codeSystem'),\r\n allergen_code_system_name = el.attr('codeSystemName');\r\n \r\n // this is not a valid place to store the allergen name but some vendors use it\r\n if (!allergen_name) {\r\n el = entry.tag('participant').tag('name');\r\n if (!el.isEmpty()) {\r\n allergen_name = el.val();\r\n }\r\n }\r\n if (!allergen_name) {\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('originalText');\r\n if (!el.isEmpty()) {\r\n allergen_name = Core.stripWhitespace(el.val());\r\n }\r\n }\r\n \r\n // status\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.28').tag('value');\r\n var status = el.attr('displayName');\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n status: status,\r\n severity: severity,\r\n reaction: {\r\n name: reaction_name,\r\n code: reaction_code,\r\n code_system: reaction_code_system\r\n },\r\n reaction_type: {\r\n name: reaction_type_name,\r\n code: reaction_type_code,\r\n code_system: reaction_type_code_system,\r\n code_system_name: reaction_type_code_system_name\r\n },\r\n allergen: {\r\n name: allergen_name,\r\n code: allergen_code,\r\n code_system: allergen_code_system,\r\n code_system_name: allergen_code_system_name\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA \"plan of care\" section\r\n */\r\n\r\n'use strict'\r\nlet Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n let self = this;\r\n self.doc = doc;\r\n\r\n self.care_plan = function (ccda) {\r\n let care_plan = ccda.section('care_plan');\r\n \r\n let data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Care Plan\";\r\n data.templateId = care_plan.tag('templateId').attr('root');\r\n data.text = care_plan.tag('text').val(true);\r\n \r\n care_plan.entries().each(function (entry) {\r\n \r\n let name = null,\r\n code = null,\r\n code_system = null,\r\n code_system_name = null;\r\n \r\n // Plan of care encounters, which have no other details\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.40');\r\n if (!el.isEmpty()) {\r\n name = 'encounter';\r\n } else {\r\n el = entry.tag('code');\r\n \r\n name = el.attr('displayName');\r\n code = el.attr('code');\r\n code_system = el.attr('codeSystem');\r\n code_system_name = el.attr('codeSystemName');\r\n }\r\n \r\n let text = Core.stripWhitespace(entry.tag('text').val(true));\r\n let time = entry.tag('effectiveTime').immediateChildTag('center').attr('value');\r\n \r\n data.entries.push({\r\n text: text,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n effective_time: parse(time)\r\n });\r\n });\r\n \r\n return data;\r\n \r\n function parse(str) {\r\n if (!str) return null;\r\n let y = str.substr(0, 4),\r\n m = str.substr(4, 2) - 1,\r\n d = str.substr(6, 2);\r\n let D = new Date(y, m, d);\r\n return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : null;\r\n }\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA demographics section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.demographics = demographics;\r\n\r\n function demographics(ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var demographics = ccda.section('demographics');\r\n \r\n var patient = demographics.tag('patientRole');\r\n el = patient.tag('patient').tag('name');\r\n var patient_name_dict = parseName(el);\r\n \r\n el = patient.tag('patient');\r\n var dob = parseDate(el.tag('birthTime').attr('value')),\r\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\r\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\r\n \r\n el = patient.tag('addr');\r\n var patient_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('telecom');\r\n var home = el.attr('value'),\r\n work = null,\r\n mobile = null;\r\n \r\n var email = null;\r\n \r\n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\r\n race = patient.tag('raceCode').attr('displayName'),\r\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\r\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\r\n \r\n el = patient.tag('birthplace');\r\n var birthplace_dict = parseAddress(el);\r\n \r\n el = patient.tag('guardian');\r\n var guardian_relationship = el.tag('code').attr('displayName'),\r\n guardian_relationship_code = el.tag('code').attr('code'),\r\n guardian_home = el.tag('telecom').attr('value');\r\n \r\n el = el.tag('guardianPerson').tag('name');\r\n var guardian_name_dict = parseName(el);\r\n \r\n el = patient.tag('guardian').tag('addr');\r\n var guardian_address_dict = parseAddress(el);\r\n \r\n el = patient.tag('providerOrganization');\r\n var provider_organization = el.tag('name').val(),\r\n provider_phone = el.tag('telecom').attr('value');\r\n \r\n var provider_address_dict = parseAddress(el.tag('addr'));\r\n \r\n data = {\r\n name: patient_name_dict,\r\n dob: dob,\r\n gender: gender,\r\n marital_status: marital_status,\r\n address: patient_address_dict,\r\n phone: {\r\n home: home,\r\n work: work,\r\n mobile: mobile\r\n },\r\n email: email,\r\n language: language,\r\n race: race,\r\n ethnicity: ethnicity,\r\n religion: religion,\r\n birthplace: {\r\n state: birthplace_dict.state,\r\n zip: birthplace_dict.zip,\r\n country: birthplace_dict.country\r\n },\r\n guardian: {\r\n name: {\r\n given: guardian_name_dict.given,\r\n family: guardian_name_dict.family\r\n },\r\n relationship: guardian_relationship,\r\n relationship_code: guardian_relationship_code,\r\n address: guardian_address_dict,\r\n phone: {\r\n home: guardian_home\r\n }\r\n },\r\n provider: {\r\n organization: provider_organization,\r\n phone: provider_phone,\r\n address: provider_address_dict\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA document section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.document = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n \r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA encounters section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.encounters = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var encounters = ccda.section('encounters');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Encounters\";\r\n data.templateId = encounters.tag('templateId').attr('root');\r\n data.text = encounters.tag('text').val(true);\r\n \r\n encounters.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName'),\r\n code_system_version = el.attr('codeSystemVersion');\r\n \r\n // translation\r\n el = entry.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer\r\n el = entry.tag('performer').tag('code');\r\n var performer_name = el.attr('displayName'),\r\n performer_code = el.attr('code'),\r\n performer_code_system = el.attr('codeSystem'),\r\n performer_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant => location\r\n el = entry.tag('participant');\r\n var organization = el.tag('code').attr('displayName');\r\n \r\n var location_dict = parseAddress(el);\r\n location_dict.organization = organization;\r\n \r\n // findings\r\n var findings = [];\r\n var findingEls = entry.elsByTag('entryRelationship');\r\n for (var i = 0; i < findingEls.length; i++) {\r\n el = findingEls[i].tag('value');\r\n findings.push({\r\n name: el.attr('displayName'),\r\n code: el.attr('code'),\r\n code_system: el.attr('codeSystem')\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n code_system_version: code_system_version,\r\n findings: findings,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n performer: {\r\n name: performer_name,\r\n code: performer_code,\r\n code_system: performer_code_system,\r\n code_system_name: performer_code_system_name\r\n },\r\n location: location_dict\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for any freetext section (i.e., contains just a single <text> element)\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n\r\n self.free_text = function (ccda, sectionName) { \r\n var data = {};\r\n \r\n var doc = ccda.section(sectionName);\r\n var text = Core.stripWhitespace(doc.tag('text').val(true));\r\n \r\n data = {\r\n text: text\r\n };\r\n\r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA functional & cognitive status\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.functional_statuses = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var data = [], el;\r\n \r\n var statuses = ccda.section('functional_statuses');\r\n \r\n statuses.entries().each(function(entry) {\r\n \r\n var date = parseDate(entry.tag('effectiveTime').attr('value'));\r\n if (!date) {\r\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\r\n }\r\n \r\n el = entry.tag('value');\r\n \r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n data.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n });\r\n \r\n });\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the CCDA immunizations section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.immunizations = function (ccda) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var administeredData = {}, declinedData = {}, product, el;\r\n \r\n var immunizations = ccda.section('immunizations');\r\n \r\n administeredData.entries = [];\r\n administeredData.displayName = \"Immunizations\";\r\n administeredData.templateId = immunizations.tag('templateId').attr('root');\r\n administeredData.text = immunizations.tag('text').val(true);\r\n \r\n declinedData.entries = [];\r\n declinedData.displayName = \"Immunizations Declined\";\r\n declinedData.templateId = immunizations.tag('templateId').attr('root');\r\n declinedData.text = immunizations.tag('text').val(true);\r\n \r\n immunizations.entries().each(function(entry) {\r\n \r\n // date\r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n if (!date) {\r\n date = parseDate(el.tag('low').attr('value'));\r\n }\r\n \r\n // if 'declined' is true, this is a record that this vaccine WASN'T administered\r\n el = entry.tag('substanceAdministration');\r\n var declined = el.boolAttr('negationInd');\r\n \r\n // product\r\n product = entry.template('2.16.840.1.113883.10.20.22.4.54');\r\n el = product.tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem'),\r\n product_code_system_name = el.attr('codeSystemName');\r\n \r\n // translation\r\n el = product.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n // misc product details\r\n el = product.tag('lotNumberText');\r\n var lot_number = el.val();\r\n \r\n el = product.tag('manufacturerOrganization');\r\n var manufacturer_name = el.tag('name').val();\r\n \r\n // route\r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // instructions\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.20');\r\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\r\n el = el.tag('code');\r\n var education_name = el.attr('displayName'),\r\n education_code = el.attr('code'),\r\n education_code_system = el.attr('codeSystem');\r\n \r\n // dose\r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n var data = (declined) ? declinedData : administeredData;\r\n data.entries.push({\r\n date: date,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n code_system_name: product_code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n lot_number: lot_number,\r\n manufacturer_name: manufacturer_name\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n instructions: instructions_text,\r\n education_type: {\r\n name: education_name,\r\n code: education_code,\r\n code_system: education_code_system\r\n }\r\n });\r\n });\r\n \r\n return {\r\n administered: administeredData,\r\n declined: declinedData\r\n };\r\n };\r\n}\r\n\r\n\r\n","/*\r\n * Parser for the CCDA \"plan of care\" section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function() {\r\n var self = this;\r\n \r\n self.instructions = function (ccda) {\r\n \r\n var data = [], el;\r\n \r\n var instructions = ccda.section('instructions');\r\n data.templateId = instructions.tag('templateId').attr('root');\r\n \r\n instructions.entries().each(function(entry) {\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n var text = Core.stripWhitespace(entry.tag('text').val(true));\r\n \r\n data.push({\r\n text: text,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA medications section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function (doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.medications = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var medications = ccda.section('medications');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Medications\";\r\n data.templateId = medications.tag('templateId').attr('root');\r\n data.text = medications.tag('text').val(true);\r\n \r\n medications.entries().each(function(entry) {\r\n \r\n el = entry.tag('text');\r\n var sig = Core.stripWhitespace(el.val());\r\n \r\n var effectiveTimes = entry.elsByTag('effectiveTime');\r\n \r\n el = effectiveTimes[0]; // the first effectiveTime is the med start date\r\n var start_date = null, end_date = null;\r\n if (el) {\r\n start_date = parseDate(el.tag('low').attr('value'));\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n }\r\n \r\n // the second effectiveTime might the schedule period or it might just\r\n // be a random effectiveTime from further in the entry... xsi:type should tell us\r\n el = effectiveTimes[1];\r\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\r\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\r\n var institutionSpecified = el.attr('institutionSpecified');\r\n if (institutionSpecified === 'true') {\r\n schedule_type= 'frequency';\r\n } else if (institutionSpecified === 'false') {\r\n schedule_type = 'interval';\r\n }\r\n \r\n el = el.tag('period');\r\n schedule_period_value = el.attr('value');\r\n schedule_period_unit = el.attr('unit');\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('code');\r\n var product_name = el.attr('displayName'),\r\n product_code = el.attr('code'),\r\n product_code_system = el.attr('codeSystem');\r\n \r\n var product_original_text = null;\r\n el = entry.tag('manufacturedProduct').tag('originalText');\r\n if (!el.isEmpty()) {\r\n product_original_text = Core.stripWhitespace(el.val());\r\n }\r\n // if we don't have a product name yet, try the originalText version\r\n if (!product_name && product_original_text) {\r\n product_name = product_original_text;\r\n }\r\n \r\n el = entry.tag('manufacturedProduct').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('doseQuantity');\r\n var dose_value = el.attr('value'),\r\n dose_unit = el.attr('unit');\r\n \r\n el = entry.tag('rateQuantity');\r\n var rate_quantity_value = el.attr('value'),\r\n rate_quantity_unit = el.attr('unit');\r\n \r\n el = entry.tag('precondition').tag('value');\r\n var precondition_name = el.attr('displayName'),\r\n precondition_code = el.attr('code'),\r\n precondition_code_system = el.attr('codeSystem');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.19').tag('value');\r\n var reason_name = el.attr('displayName'),\r\n reason_code = el.attr('code'),\r\n reason_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('routeCode');\r\n var route_name = el.attr('displayName'),\r\n route_code = el.attr('code'),\r\n route_code_system = el.attr('codeSystem'),\r\n route_code_system_name = el.attr('codeSystemName');\r\n \r\n // participant/playingEntity => vehicle\r\n el = entry.tag('participant').tag('playingEntity');\r\n var vehicle_name = el.tag('name').val();\r\n \r\n el = el.tag('code');\r\n // prefer the code vehicle_name but fall back to the non-coded one\r\n vehicle_name = el.attr('displayName') || vehicle_name;\r\n var vehicle_code = el.attr('code'),\r\n vehicle_code_system = el.attr('codeSystem'),\r\n vehicle_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.tag('administrationUnitCode');\r\n var administration_name = el.attr('displayName'),\r\n administration_code = el.attr('code'),\r\n administration_code_system = el.attr('codeSystem'),\r\n administration_code_system_name = el.attr('codeSystemName');\r\n \r\n // performer => prescriber\r\n el = entry.tag('performer');\r\n var prescriber_organization = el.tag('name').val(),\r\n prescriber_person = null;\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n text: sig,\r\n product: {\r\n name: product_name,\r\n code: product_code,\r\n code_system: product_code_system,\r\n text: product_original_text,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n }\r\n },\r\n dose_quantity: {\r\n value: dose_value,\r\n unit: dose_unit\r\n },\r\n rate_quantity: {\r\n value: rate_quantity_value,\r\n unit: rate_quantity_unit\r\n },\r\n precondition: {\r\n name: precondition_name,\r\n code: precondition_code,\r\n code_system: precondition_code_system\r\n },\r\n reason: {\r\n name: reason_name,\r\n code: reason_code,\r\n code_system: reason_code_system\r\n },\r\n route: {\r\n name: route_name,\r\n code: route_code,\r\n code_system: route_code_system,\r\n code_system_name: route_code_system_name\r\n },\r\n schedule: {\r\n type: schedule_type,\r\n period_value: schedule_period_value,\r\n period_unit: schedule_period_unit\r\n },\r\n vehicle: {\r\n name: vehicle_name,\r\n code: vehicle_code,\r\n code_system: vehicle_code_system,\r\n code_system_name: vehicle_code_system_name\r\n },\r\n administration: {\r\n name: administration_name,\r\n code: administration_code,\r\n code_system: administration_code_system,\r\n code_system_name: administration_code_system_name\r\n },\r\n prescriber: {\r\n organization: prescriber_organization,\r\n person: prescriber_person\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA problems section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.problems = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n \r\n var problems = ccda.section('problems');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Problems\";\r\n data.templateId = problems.tag('templateId').attr('root');\r\n data.text = problems.tag('text').val(true);\r\n \r\n problems.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var start_date = parseDate(el.tag('low').attr('value')),\r\n end_date = parseDate(el.tag('high').attr('value'));\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('value');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.6');\r\n var status = el.tag('value').attr('displayName');\r\n \r\n var age = null;\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.31');\r\n if (!el.isEmpty()) {\r\n age = parseFloat(el.tag('value').attr('value'));\r\n }\r\n \r\n el = entry.template('2.16.840.1.113883.10.20.22.4.64');\r\n var comment = Core.stripWhitespace(el.tag('text').val());\r\n \r\n data.entries.push({\r\n date_range: {\r\n start: start_date,\r\n end: end_date\r\n },\r\n name: name,\r\n status: status,\r\n age: age,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n comment: comment\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDA procedures section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.procedures = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var procedures = ccda.section('procedures');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Procedures\";\r\n data.templateId = procedures.tag('templateId').attr('root');\r\n data.text = procedures.tag('text').val(true);\r\n \r\n procedures.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var date = parseDate(el.attr('value'));\r\n \r\n el = entry.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(entry.tag('originalText').val());\r\n }\r\n \r\n // 'specimen' tag not always present\r\n el = entry.tag('specimen').tag('code');\r\n var specimen_name = el.attr('displayName'),\r\n specimen_code = el.attr('code'),\r\n specimen_code_system = el.attr('codeSystem');\r\n \r\n el = entry.tag('performer').tag('addr');\r\n var organization = el.tag('name').val(),\r\n phone = el.tag('telecom').attr('value');\r\n \r\n var performer_dict = parseAddress(el);\r\n performer_dict.organization = organization;\r\n performer_dict.phone = phone;\r\n \r\n // participant => device\r\n el = entry.template('2.16.840.1.113883.10.20.22.4.37').tag('code');\r\n var device_name = el.attr('displayName'),\r\n device_code = el.attr('code'),\r\n device_code_system = el.attr('codeSystem');\r\n \r\n data.entries.push({\r\n date: date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n specimen: {\r\n name: specimen_name,\r\n code: specimen_code,\r\n code_system: specimen_code_system\r\n },\r\n performer: performer_dict,\r\n device: {\r\n name: device_name,\r\n code: device_code,\r\n code_system: device_code_system\r\n }\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA results (labs) section\r\n */\r\n\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.results = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var results = ccda.section('results');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Results\";\r\n data.templateId = results.tag('templateId').attr('root');\r\n data.text = results.tag('text').val(true);\r\n \r\n results.entries().each(function(entry) {\r\n \r\n // panel\r\n el = entry.tag('code');\r\n var panel_name = el.attr('displayName'),\r\n panel_code = el.attr('code'),\r\n panel_code_system = el.attr('codeSystem'),\r\n panel_code_system_name = el.attr('codeSystemName');\r\n \r\n var observation;\r\n var tests = entry.elsByTag('observation');\r\n var tests_data = [];\r\n \r\n for (var i = 0; i < tests.length; i++) {\r\n observation = tests[i];\r\n \r\n var date = parseDate(observation.tag('effectiveTime').attr('value'));\r\n \r\n el = observation.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (!name) {\r\n name = Core.stripWhitespace(observation.tag('text').val());\r\n }\r\n \r\n el = observation.tag('translation');\r\n var translation_name = el.attr('displayName'),\r\n translation_code = el.attr('code'),\r\n translation_code_system = el.attr('codeSystem'),\r\n translation_code_system_name = el.attr('codeSystemName');\r\n \r\n el = observation.tag('value');\r\n var value = el.attr('value'),\r\n unit = el.attr('unit');\r\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\r\n // not to trust that that field has been used correctly...\r\n if (value && !isNaN(parseFloat(value))) {\r\n value = parseFloat(value);\r\n }\r\n if (!value) {\r\n value = el.val(); // look for free-text values\r\n }\r\n \r\n el = observation.tag('referenceRange');\r\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\r\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\r\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\r\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\r\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\r\n \r\n tests_data.push({\r\n date: date,\r\n name: name,\r\n value: value,\r\n unit: unit,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n translation: {\r\n name: translation_name,\r\n code: translation_code,\r\n code_system: translation_code_system,\r\n code_system_name: translation_code_system_name\r\n },\r\n reference_range: {\r\n text: reference_range_text,\r\n low_unit: reference_range_low_unit,\r\n low_value: reference_range_low_value,\r\n high_unit: reference_range_high_unit,\r\n high_value: reference_range_high_value,\r\n }\r\n });\r\n }\r\n \r\n data.entries.push({\r\n name: panel_name,\r\n code: panel_code,\r\n code_system: panel_code_system,\r\n code_system_name: panel_code_system_name,\r\n tests: tests_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDA smoking status in social history section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.smoking_status = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data, el;\r\n \r\n var name = null,\r\n code = null,\r\n code_system = null,\r\n code_system_name = null,\r\n entry_date = null;\r\n \r\n // We can parse all of the social_history sections,\r\n // but in practice, this section seems to be used for\r\n // smoking status, so we're just going to break that out.\r\n // And we're just looking for the first non-empty one.\r\n var social_history = ccda.section('social_history');\r\n var entries = social_history.entries();\r\n for (var i=0; i < entries.length; i++) {\r\n var entry = entries[i];\r\n \r\n var smoking_status = entry.template('2.16.840.1.113883.10.20.22.4.78');\r\n if (smoking_status.isEmpty()) {\r\n smoking_status = entry.template('2.16.840.1.113883.10.22.4.78');\r\n }\r\n if (smoking_status.isEmpty()) {\r\n continue;\r\n }\r\n \r\n el = smoking_status.tag('effectiveTime');\r\n entry_date = parseDate(el.attr('value'));\r\n \r\n el = smoking_status.tag('value');\r\n name = el.attr('displayName');\r\n code = el.attr('code');\r\n code_system = el.attr('codeSystem');\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n if (name) {\r\n break;\r\n }\r\n }\r\n \r\n data = {\r\n date: entry_date,\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name\r\n };\r\n \r\n return data;\r\n }; \r\n}","/*\r\n * Parser for the CCDA vitals section\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.vitals = function (ccda) {\r\n \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var vitals = ccda.section('vitals');\r\n \r\n var data = {}, el;\r\n data.entries = [];\r\n data.displayName = \"Vitals\";\r\n data.templateId = vitals.tag('templateId').attr('root');\r\n data.text = vitals.tag('text').val(true);\r\n \r\n vitals.entries().each(function(entry) {\r\n \r\n el = entry.tag('effectiveTime');\r\n var entry_date = parseDate(el.attr('value'));\r\n \r\n var result;\r\n var results = entry.elsByTag('component');\r\n var results_data = [];\r\n \r\n for (var i = 0; i < results.length; i++) {\r\n result = results[i];\r\n \r\n el = result.tag('code');\r\n var name = el.attr('displayName'),\r\n code = el.attr('code'),\r\n code_system = el.attr('codeSystem'),\r\n code_system_name = el.attr('codeSystemName');\r\n \r\n el = result.tag('value');\r\n var value = parseFloat(el.attr('value')),\r\n unit = el.attr('unit');\r\n \r\n results_data.push({\r\n name: name,\r\n code: code,\r\n code_system: code_system,\r\n code_system_name: code_system_name,\r\n value: value,\r\n unit: unit\r\n });\r\n }\r\n \r\n data.entries.push({\r\n date: entry_date,\r\n results: results_data\r\n });\r\n });\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 document\r\n */\r\n\r\nvar ParseGenericInfo = require('./generic');\r\nvar Core = require('../core');\r\n\r\nvar DocumentParser = require('./ccdar2/document');\r\nvar DemographicsParser = require('./ccda/demographics');\r\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n self.documentParser = new DocumentParser(self.doc);\r\n self.demographicsParser = new DemographicsParser(self.doc);\r\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\r\n\r\n self.run = function (ccda) { \r\n var data = {};\r\n \r\n data.document = self.documentParser.document(ccda);\r\n data.demographics = self.demographicsParser.demographics(ccda);\r\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\r\n data.json = Core.json;\r\n \r\n // Decorate each section with Title, templateId and text and adds missing sections\r\n ParseGenericInfo(ccda, data);\r\n \r\n return data;\r\n };\r\n}\r\n","/*\r\n * Parser for the CCDAR2 document section\r\n */\r\nvar Core = require('../../core');\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.document = function (ccda) { \r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n var data = {}, el;\r\n \r\n var doc = ccda.section('document');\r\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\r\n var title = Core.stripWhitespace(doc.tag('title').val());\r\n \r\n // Parse Doc Type Info\r\n var templates = doc.elsByTag('templateId');\r\n \r\n var rootTemplate = templates[0].attr('root');\r\n var secondTemplate;\r\n if(templates.length >1)\r\n secondTemplate = templates[1].attr('root');\r\n else\r\n secondTemplate = rootTemplate;\r\n \r\n var loinc = doc.tag('code').attr('code');\r\n var templateId = doc.tag('templateId').attr('root');\r\n var displayName = doc.tag('code').attr('displayName');\r\n \r\n var nonXml = doc.tag('nonXMLBody');\r\n var nonXmlNodes = nonXml.el.childNodes;\r\n \r\n var bodyType = \"structured\";\r\n var nonXmlBody = {\r\n type: \"\",\r\n mediaType: \"\",\r\n representation: \"\",\r\n rawText: \"\",\r\n reference: \"\"\r\n };\r\n if(nonXmlNodes && nonXmlNodes.length > 0) {\r\n bodyType = \"unstructured\";\r\n var text = nonXml.tag('text');\r\n var mediaType = \"\";\r\n var representation = \"\";\r\n var rawText = \"\";\r\n var reference = \"\";\r\n var type = \"\";\r\n \r\n // We have an embedded doc\r\n if(text && text.attr('mediaType')) {\r\n mediaType = text.attr('mediaType');\r\n representation = text.attr('representation');\r\n rawText = text.val();\r\n type = \"embedded\";\r\n }\r\n \r\n if(text && !mediaType) {\r\n reference = text.tag('reference').attr('value');\r\n type = \"reference\";\r\n }\r\n nonXmlBody = {\r\n type: type,\r\n mediaType: mediaType,\r\n representation: representation,\r\n rawText: rawText,\r\n reference: reference\r\n }\r\n }\r\n \r\n var docType = {\r\n type: \"CCDAR2\",\r\n rootTemplateId: rootTemplate,\r\n templateId: secondTemplate,\r\n displayName: displayName,\r\n loinc: loinc,\r\n bodyType: bodyType,\r\n nonXmlBody: nonXmlBody\r\n };\r\n \r\n var author = doc.tag('author');\r\n el = author.tag('assignedPerson').tag('name');\r\n var name_dict = parseName(el);\r\n \r\n el = author.tag('addr');\r\n var address_dict = parseAddress(el);\r\n \r\n el = author.tag('telecom');\r\n var work_phone = el.attr('value');\r\n \r\n var documentation_of_list = [];\r\n var performers = doc.tag('documentationOf').elsByTag('performer');\r\n for (var i = 0; i < performers.length; i++) {\r\n el = performers[i];\r\n var performer_name_dict = parseName(el);\r\n var performer_phone = el.tag('telecom').attr('value');\r\n var performer_addr = parseAddress(el.tag('addr'));\r\n documentation_of_list.push({\r\n name: performer_name_dict,\r\n phone: {\r\n work: performer_phone\r\n },\r\n address: performer_addr\r\n });\r\n }\r\n \r\n el = doc.tag('encompassingEncounter').tag('location');\r\n var location_name = Core.stripWhitespace(el.tag('name').val());\r\n var location_addr_dict = parseAddress(el.tag('addr'));\r\n \r\n var encounter_date = null;\r\n el = el.tag('effectiveTime');\r\n if (!el.isEmpty()) {\r\n encounter_date = parseDate(el.attr('value'));\r\n }\r\n \r\n data = {\r\n type: docType,\r\n date: date,\r\n title: title,\r\n author: {\r\n name: name_dict,\r\n address: address_dict,\r\n phone: {\r\n work: work_phone\r\n }\r\n },\r\n documentation_of: documentation_of_list,\r\n location: {\r\n name: location_name,\r\n address: location_addr_dict,\r\n encounter_date: encounter_date\r\n }\r\n };\r\n \r\n return data;\r\n };\r\n}","/*\r\n * Parser for the CCDAR2 Health Concerns Section\r\n * 2.16.840.1.113883.10.20.22.2.58\r\n */\r\n\r\nmodule.exports = function(doc) {\r\n var self = this;\r\n self.doc = doc;\r\n\r\n self.health_concerns_document = function (ccda) {\r\n var parseDate = self.doc.parseDate;\r\n var parseName = self.doc.parseName;\r\n var parseAddress = self.doc.parseAddress;\r\n \r\n // Helper to create each iterator for collection\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n \r\n var model = {}, el;\r\n model.entries = [];\r\n \r\n model.text = ccda.tag('text').val(true);\r\n \r\n var health_concerns = ccda.section('health_concerns_document');\r\n var title = health_concerns.tag('title').val();\r\n \r\n health_concerns.entries().each(function(entry) {\r\n \r\n var entryModel = {};\r\n // Parse out the ACT Body\r\n //A record of something that is being done, has been done, can be done, or is intended or requested to be done.\r\n var act = entry.tag('act');\r\n var er = act.elsByTag('entryRelationship');\r\n var templateId = act.tag('templateId').attr('root');\r\n var id = act.tag('id').attr('root');\r\n var statusCode = act.tag('statusCode').attr('code');\r\n var code = act.tag('code');\r\n var name = code.attr('displayName');\r\n var effectiveTime = parseDate(entry.tag('effectiveTime'));\r\n \r\n // The model we want to return in json\r\n var actModel = {\r\n effective_time: effectiveTime,\r\n name: name,\r\n entry_relationship:[]\r\n };\r\n \r\n // Parse Entity Relationship child nodes\r\n \r\n var ers = entry.elsByTag('entryRelationship');\r\n ers.each = each;\r\n \r\n ers.each(function(er){\r\n \r\n var erModel = {\r\n type_code : er.attr('typeCode'),\r\n observations : []\r\n };\r\n \r\n var obs = er.elsByTag('observation');\r\n obs.each = each;\r\n \r\n // Parse out Obsevations for Each ER\r\n obs.each(function(ob) {\r\n erModel.observations.push({\r\n class_code: ob.attr('classCode'),\r\n mood_code: ob.attr('moodCode'),\r\n display_name : ob.tag('value').attr('displayName'),\r\n status: ob.tag('statusCode').attr('code')\r\n });\r\n });\r\n \r\n actModel.entry_relationship.push(erModel);\r\n \r\n });\r\n \r\n // Add ACT Model to our final return model\r\n entryModel['act'] = actModel;\r\n model.entries.push(entryModel);\r\n });\r\n \r\n return model;\r\n }; \r\n}","/* Parses out basic data about each section */\r\n\r\nmodule.exports = function (ccda, data) {\r\n\r\n var each = function (callback) {\r\n for (var i = 0; i < this.length; i++) {\r\n callback(this[i]);\r\n }\r\n };\r\n\r\n var containsTemplateId = function(templateId, data) {\r\n for (var property in data) {\r\n if (data.hasOwnProperty(property)) {\r\n var p = data[property].templateId;\r\n //var display = this[property].displayName;\r\n if(p) {\r\n if(p === templateId) {\r\n //console.log(\"TemplateId Match \" + templateId + \" \" + display);\r\n return true;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n };\r\n\r\n var allSections = ccda.elsByTag('section');\r\n allSections.each = each;\r\n\r\n allSections.each(function(s) {\r\n\r\n var code = s.tag('code').attr('displayName');\r\n var templateId = s.tag('templateId').attr('root');\r\n\r\n var existingTemplateId = containsTemplateId(templateId, data);\r\n\r\n if (code) {\r\n var nodeName = code.split(' ').join('_').toLowerCase();\r\n\r\n //console.log(\"NODE NAME \" + nodeName);\r\n\r\n if (!data[nodeName] && !existingTemplateId) {\r\n //console.log(\"CREATE NODE \" + code);\r\n data[nodeName] = {};\r\n }\r\n\r\n if(data[nodeName]) {\r\n data[nodeName].displayName = code;\r\n data[nodeName].templateId = templateId;\r\n data[nodeName].text = s.tag('text').val(true);\r\n }\r\n\r\n }\r\n });\r\n};","module.exports = require(\"@xmldom/xmldom\");","module.exports = require(\"lodash\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(97);\n",""],"names":["Core","require","Documents","Generators","Parsers","module","exports","source","opts","type","parsedData","parsedDocument","parseData","parser","documents","detect","parsers","C32","process","run","CCDA","CCDAR2","CCD","generatorType","template","testingMode","data","Codes","XML","stripWhitespace","json","trim","charAt","parse","e","console","log","JSON","error","datePad","number","replacerFn","key","value","originalValue","Date","isNaN","getTime","_parsedWithTimeData","getHours","getMinutes","getSeconds","getMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getMonth","getDate","getFullYear","stringify","o","y","x","hasOwnProperty","Object","GENDER_MAP","MARITAL_STATUS_MAP","RELIGION_MAP","RACE_ETHNICITY_MAP","ROLE_MAP","PROBLEM_STATUS_MAP","invertKeys","obj","result","keys","i","length","lookupFnGenerator","map","reverseLookupFnGenerator","invertedMap","toLowerCase","gender","reverseGender","maritalStatus","reverseMaritalStatus","religion","reverseReligion","raceEthnicity","reverseRaceEthnicity","role","reverseRole","problemStatus","reverseProblemStatus","str","wrapElement","el","wrapElementHelper","currentEl","content","tag","immediateChildTag","elsByTag","attr","boolAttr","val","isEmpty","els","push","tagAttrVal","getElementsByTagName","getAttribute","templateId","emptyEl","parentNode","contentId","unescapeSpecialChars","s","replace","attrName","attrVal","rawAttr","html","childNodes","textContent","innerHTML","root","XMLSerializer","serializeToString","tagName","slice","docRoot","ownerDocument","contentTag","doc","createElement","xml","isNode","xmldom","DOMParser","parseFromString","window","ActiveXObject","async","loadXML","documentElement","global","document","prototype","toString","call","DOMImplementation","createDocument","self","entries","parseDate","parseName","parseAddress","getEntries","each","callback","year","substr","month","parseInt","day","hour","min","secs","utcOffset","_utcOffsetFromString","_toInt","date","UTC","parseTimezoneChunker","parseTokenTimezone","string","possibleTzMatches","match","tzChunk","parts","minutes","argumentForCoercion","coercedNumber","isFinite","Math","floor","ceil","nameEl","prefix","given","family","addrEl","street","city","state","zip","country","section","c32","name","ccda","method","_","now","filename","bb","tagHelpers","ejs","helpers","codes","AllergiesParser","DemographicsParser","DocumentParser","EncountersParser","ImmunizationsParser","MedicationsParser","ProblemsParser","ProceduresParser","ResultsParser","VitalsParser","ParseGenericInfo","allergiesParser","demographicsParser","encountersParser","immunizationsParser","medicationsParser","problemsParser","proceduresParser","resultsParser","vitalsParser","allergies","demographics","encounters","parsedImmunizations","immunizations","administered","immunization_declines","declined","results","medications","problems","procedures","vitals","smoking_status","code","code_system","code_system_name","chief_complaint","text","care_plan","instructions","functional_statuses","displayName","entry","start_date","end_date","reaction_type_name","reaction_type_code","reaction_type_code_system","reaction_type_code_system_name","reaction_name","reaction_code","reaction_code_system","severity","allergen_name","allergen_code","allergen_code_system","allergen_code_system_name","status","date_range","start","end","reaction","reaction_type","allergen","patient","patient_name_dict","dob","marital_status","patient_address_dict","home","work","mobile","email","language","race","ethnicity","birthplace_dict","guardian_relationship","guardian_relationship_code","guardian_home","guardian_name_dict","guardian_address_dict","provider_organization","provider_phone","provider_address_dict","address","phone","birthplace","guardian","relationship","relationship_code","provider","organization","templates","rootTemplate","secondTemplate","loinc","nonXml","nonXmlNodes","bodyType","nonXmlBody","mediaType","representation","rawText","reference","docType","rootTemplateId","title","author","name_dict","address_dict","work_phone","documentation_of_list","performers","performer_name_dict","performer_phone","performer_addr","location_name","location_addr_dict","encounter_date","documentation_of","location","code_system_version","translation_name","translation_code","translation_code_system","translation_code_system_name","performer_name","performer_code","performer_code_system","performer_code_system_name","location_dict","findings","findingEls","translation","performer","administeredData","declinedData","product","product_name","product_code","product_code_system","product_code_system_name","lot_number","manufacturer_name","route_name","route_code","route_code_system","route_code_system_name","instructions_text","education_name","education_code","education_code_system","dose_value","dose_unit","dose_quantity","unit","route","education_type","effectiveTimes","schedule_type","schedule_period_value","schedule_period_unit","institutionSpecified","product_original_text","rate_quantity_value","rate_quantity_unit","precondition_name","precondition_code","precondition_code_system","reason_name","reason_code","reason_code_system","vehicle_name","vehicle_code","vehicle_code_system","vehicle_code_system_name","administration_name","administration_code","administration_code_system","administration_code_system_name","prescriber_organization","prescriber_person","rate_quantity","precondition","reason","schedule","period_value","period_unit","vehicle","administration","prescriber","person","age","parseFloat","comment","specimen_name","specimen_code","specimen_code_system","performer_dict","device_name","device_code","device_code_system","specimen","device","panel_date","panel_name","panel_code","panel_code_system","panel_code_system_name","observation","tests","tests_data","reference_range_text","reference_range_low_unit","reference_range_low_value","reference_range_high_unit","reference_range_high_value","reference_range","low_unit","low_value","high_unit","high_value","entry_date","results_data","j","HealthConcernsParser","documentParser","healthConcernsParser","health_concerns_document","CarePlanParser","FreeTextParser","FunctionalStatusesParser","InstructionsParser","SmokingStatusParser","carePlanParser","freeTextParser","functionalStatusesParser","instructionsParser","smokingStatusParser","free_text","time","effective_time","m","d","D","sectionName","statuses","sig","social_history","model","health_concerns","entryModel","act","er","id","statusCode","effectiveTime","actModel","entry_relationship","ers","erModel","type_code","observations","obs","ob","class_code","mood_code","display_name","containsTemplateId","property","p","allSections","existingTemplateId","nodeName","split","join"],"sourceRoot":""}
|
|
1
|
+
{"version":3,"file":"bluebutton.js","mappings":"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A;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KATE,CAUM;AACR;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,S;;;;;;;AClJA;AACA;AACA;;AAEAf,MAAM,CAACC,OAAO,GAAG;EACfa,GAAG,EAAEA;AACP,CAAC;;AAED;AACA;AACA;AACA,SAASA,GAAGA,CAACY,IAAI,EAAEP,QAAQ,EAAEC,WAAW,EAAE;EACxC,2BAA2B;EAC3BW,OAAO,CAACC,GAAG,CAAC,uCAAuC,CAAC;EACpD,OAAO,IAAI;AACb;AAAC,C;;;;;;;ACfD;AACA;AACA;AACA,IAAI2K,CAAC,GAAG/M,mBAAO,CAAC,GAAQ,CAAC;AAEzBI,MAAM,CAACC,OAAO,GAAG;EACfa,GAAG,EAAEA;AACP,CAAC;;AAED;AACA;AACA;AACA;AACA;AACA;AACA;AACA,SAASA,GAAGA,CAACY,IAAI,EAAEP,QAAQ,EAAEC,WAAW,EAAE;EACxC,IAAI,CAACD,QAAQ,EAAE;IACbY,OAAO,CAACC,GAAG,CAAC,+DAA+D,GAC/D,4DAA4D,CAAC;IACzE,OAAO,IAAI;EACb;;EAEA;EACA;EACA,IAAI4K,GAAG,GA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","sources":["webpack://bluebutton/webpack/universalModuleDefinition","webpack://bluebutton/./lib/bluebutton.js","webpack://bluebutton/./lib/core.js","webpack://bluebutton/./lib/core/codes.js","webpack://bluebutton/./lib/core/common.js","webpack://bluebutton/./lib/core/xml.js","webpack://bluebutton/./lib/documents.js","webpack://bluebutton/./lib/documents/c32.js","webpack://bluebutton/./lib/documents/ccd.js","webpack://bluebutton/./lib/documents/ccda.js","webpack://bluebutton/./lib/documents/ccdar2.js","webpack://bluebutton/./lib/generators.js","webpack://bluebutton/./lib/generators/c32.js","webpack://bluebutton/./lib/generators/ccda.js","webpack://bluebutton/./lib/parsers.js","webpack://bluebutton/./lib/parsers/c32.js","webpack://bluebutton/./lib/parsers/c32/allergies.js","webpack://bluebutton/./lib/parsers/c32/demographics.js","webpack://bluebutton/./lib/parsers/c32/document.js","webpack://bluebutton/./lib/parsers/c32/encounters.js","webpack://bluebutton/./lib/parsers/c32/immunizations.js","webpack://bluebutton/./lib/parsers/c32/medications.js","webpack://bluebutton/./lib/parsers/c32/problems.js","webpack://bluebutton/./lib/parsers/c32/procedures.js","webpack://bluebutton/./lib/parsers/c32/results.js","webpack://bluebutton/./lib/parsers/c32/vitals.js","webpack://bluebutton/./lib/parsers/ccd.js","webpack://bluebutton/./lib/parsers/ccd/document.js","webpack://bluebutton/./lib/parsers/ccda.js","webpack://bluebutton/./lib/parsers/ccda/allergies.js","webpack://bluebutton/./lib/parsers/ccda/care_plan.js","webpack://bluebutton/./lib/parsers/ccda/demographics.js","webpack://bluebutton/./lib/parsers/ccda/document.js","webpack://bluebutton/./lib/parsers/ccda/encounters.js","webpack://bluebutton/./lib/parsers/ccda/free_text.js","webpack://bluebutton/./lib/parsers/ccda/functional_statuses.js","webpack://bluebutton/./lib/parsers/ccda/immunizations.js","webpack://bluebutton/./lib/parsers/ccda/instructions.js","webpack://bluebutton/./lib/parsers/ccda/medications.js","webpack://bluebutton/./lib/parsers/ccda/problems.js","webpack://bluebutton/./lib/parsers/ccda/procedures.js","webpack://bluebutton/./lib/parsers/ccda/results.js","webpack://bluebutton/./lib/parsers/ccda/smoking_status.js","webpack://bluebutton/./lib/parsers/ccda/vitals.js","webpack://bluebutton/./lib/parsers/ccdar2.js","webpack://bluebutton/./lib/parsers/ccdar2/document.js","webpack://bluebutton/./lib/parsers/ccdar2/health_concerns.js","webpack://bluebutton/./lib/parsers/generic.js","webpack://bluebutton/external commonjs \"@xmldom/xmldom\"","webpack://bluebutton/external commonjs \"lodash\"","webpack://bluebutton/webpack/bootstrap","webpack://bluebutton/webpack/runtime/global","webpack://bluebutton/webpack/before-startup","webpack://bluebutton/webpack/startup","webpack://bluebutton/webpack/after-startup"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"bluebutton\"] = factory();\n\telse\n\t\troot[\"bluebutton\"] = factory();\n})(self, () => {\nreturn ","'use strict';\n/*\n * ...\n */\n\nvar Core = require('./core');\n\nvar Documents = require('./documents');\n\nvar Generators = require('./generators');\n\nvar Parsers = require('./parsers');\n\n\n/* exported BlueButton */\nmodule.exports = function (source, opts) {\n var type, parsedData, parsedDocument;\n \n // Look for options\n if (!opts) opts = {};\n \n // Detect and parse the source data\n parsedData = Core.parseData(source);\n \n // Detect and parse the document\n if (opts.parser) {\n \n // TODO: parse the document with provided custom parser\n parsedDocument = opts.parser();\n \n } else {\n var documents = new Documents();\n type = documents.detect(parsedData);\n var parsers = new Parsers(documents);\n switch (type) {\n case 'c32':\n parsedData = documents.C32.process(parsedData);\n parsedDocument = parsers.C32.run(parsedData);\n break;\n case 'ccda':\n parsedData = documents.CCDA.process(parsedData);\n parsedDocument = parsers.CCDA.run(parsedData);\n break;\n case 'ccdar2':\n parsedData = documents.CCDAR2.process(parsedData);\n parsedDocument = parsers.CCDAR2.run(parsedData);\n break;\n case 'ccd':\n parsedData = documents.CCD.process(parsedData);\n parsedDocument = parsers.CCD.run(parsedData);\n break;\n case 'json':\n /* Expects a call like:\n * BlueButton(json string, {\n * generatorType: 'ccda',\n * template: < EJS file contents >\n * })\n * The returned \"type\" will be the requested type (not \"json\")\n * and the XML will be turned as a string in the 'data' key\n */\n switch (opts.generatorType) {\n // only the unit tests ever need to worry about this testingMode argument\n case 'c32':\n type = 'c32';\n parsedDocument = Generators.C32.run(parsedData, opts.template, opts.testingMode);\n break;\n case 'ccda':\n type = 'ccda';\n parsedDocument = Generators.CCDA.run(parsedData, opts.template, opts.testingMode);\n break;\n }\n }\n }\n \n return {\n type: type,\n data: parsedDocument,\n source: parsedData\n };\n\n};\n","/*\n * ...\n */\n\nvar Codes = require('./core/codes');\nvar XML = require('./core/xml');\nvar { stripWhitespace } = require('./core/common');\n\n/* exported Core */\nmodule.exports = {\n parseData: parseData,\n stripWhitespace: stripWhitespace,\n json: json,\n trim: trim,\n Codes: Codes,\n XML: XML\n};\n/*\n * ...\n */\nfunction parseData(source) {\n source = stripWhitespace(source);\n \n if (source.charAt(0) === '<') {\n try {\n return XML.parse(source);\n } catch (e) {\n if (console.log) {\n console.log(\"File looked like it might be XML but couldn't be parsed.\");\n }\n }\n }\n\n try {\n return JSON.parse(source);\n } catch (e) {\n if (console.error) {\n console.error(\"Error: Cannot parse this file. BB.js only accepts valid XML \" +\n \"(for parsing) or JSON (for generation). If you are attempting to provide \" +\n \"XML or JSON, please run your data through a validator to see if it is malformed.\\n\");\n }\n throw e;\n }\n};\n\n/*\n * A wrapper around JSON.stringify which allows us to produce customized JSON.\n *\n * See https://developer.mozilla.org/en-US/docs/Web/\n * JavaScript/Guide/Using_native_JSON#The_replacer_parameter\n * for documentation on the replacerFn.\n */\nfunction json() {\n\n var datePad = function(number) {\n if (number < 10) {\n return '0' + number;\n }\n return number;\n };\n \n var replacerFn = function(key, value) {\n /* By default, Dates are output as ISO Strings like \"2014-01-03T08:00:00.000Z.\" This is\n * tricky when all we have is a date (not a datetime); JS sadly ignores that distinction.\n *\n * To paper over this JS wart, we use two different JSON formats for dates and datetimes.\n * This is a little ugly but makes sure that the dates/datetimes mostly just parse\n * correclty for clients:\n *\n * 1. Datetimes are rendered as standard ISO strings, without the misleading millisecond\n * precision (misleading because we don't have it): YYYY-MM-DDTHH:mm:ssZ\n * 2. Dates are rendered as MM/DD/YYYY. This ensures they are parsed as midnight local-time,\n * no matter what local time is, and therefore ensures the date is always correct.\n * Outputting \"YYYY-MM-DD\" would lead most browsers/node to assume midnight UTC, which\n * means \"2014-04-27\" suddenly turns into \"04/26/2014 at 5PM\" or just \"04/26/2014\"\n * if you format it as a date...\n *\n * See http://stackoverflow.com/questions/2587345/javascript-date-parse and\n * http://blog.dygraphs.com/2012/03/javascript-and-dates-what-mess.html\n * for more on this issue.\n */\n var originalValue = this[key]; // a Date\n\n if ( value && (originalValue instanceof Date) && !isNaN(originalValue.getTime()) ) {\n\n // If while parsing we indicated that there was time-data specified, or if we see\n // non-zero values in the hour/minutes/seconds/millis fields, output a datetime.\n if (originalValue._parsedWithTimeData ||\n originalValue.getHours() || originalValue.getMinutes() ||\n originalValue.getSeconds() || originalValue.getMilliseconds()) {\n\n // Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/\n // Reference/Global_Objects/Date/toISOString\n return originalValue.getUTCFullYear() +\n '-' + datePad( originalValue.getUTCMonth() + 1 ) +\n '-' + datePad( originalValue.getUTCDate() ) +\n 'T' + datePad( originalValue.getUTCHours() ) +\n ':' + datePad( originalValue.getUTCMinutes() ) +\n ':' + datePad( originalValue.getUTCSeconds() ) +\n 'Z';\n }\n \n // We just have a pure date\n return datePad( originalValue.getMonth() + 1 ) +\n '/' + datePad( originalValue.getDate() ) +\n '/' + originalValue.getFullYear();\n\n }\n\n return value;\n };\n \n return JSON.stringify(this, replacerFn, 2);\n};\n\n\n/*\n * Removes all `null` properties from an object.\n */\nfunction trim(o) {\n var y;\n for (var x in o) {\n if (o.hasOwnProperty(x)) {\n y = o[x];\n // if (y === null || (y instanceof Object && Object.keys(y).length == 0)) {\n if (y === null) {\n delete o[x];\n }\n if (y instanceof Object) y = trim(y);\n }\n }\n return o;\n};\n","/*\n * ...\n */\n\n\n \n/*\n * Administrative Gender (HL7 V3)\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=8DE75E17-176B-DE11-9B52-0015173D1785\n * OID: 2.16.840.1.113883.1.11.1\n */\nvar GENDER_MAP = {\n 'F': 'female',\n 'M': 'male',\n 'UN': 'undifferentiated'\n};\n\n/*\n * Marital Status (HL7)\n * http://phinvads.cdc.gov/vads/ViewValueSet.action?id=46D34BBC-617F-DD11-B38D-00188B398520\n * OID: 2.16.840.1.114222.4.11.809\n */\nvar MARITAL_STATUS_MAP = {\n 'N': 'annulled',\n 'C': 'common law',\n 'D': 'divorced',\n 'P': 'domestic partner',\n 'I': 'interlocutory',\n 'E': 'legally separated',\n 'G': 'living together',\n 'M': 'married',\n 'O': 'other',\n 'R': 'registered domestic partner',\n 'A': 'separated',\n 'S': 'single',\n 'U': 'unknown',\n 'B': 'unmarried',\n 'T': 'unreported',\n 'W': 'widowed'\n};\n\n/*\n * Religious Affiliation (HL7 V3)\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=6BFDBFB5-A277-DE11-9B52-0015173D1785\n * OID: 2.16.840.1.113883.5.1076\n */\nvar RELIGION_MAP = {\n \"1001\": \"adventist\",\n \"1002\": \"african religions\",\n \"1003\": \"afro-caribbean religions\",\n \"1004\": \"agnosticism\",\n \"1005\": \"anglican\",\n \"1006\": \"animism\",\n \"1061\": \"assembly of god\",\n \"1007\": \"atheism\",\n \"1008\": \"babi & baha'i faiths\",\n \"1009\": \"baptist\",\n \"1010\": \"bon\",\n \"1062\": \"brethren\",\n \"1011\": \"cao dai\",\n \"1012\": \"celticism\",\n \"1013\": \"christian (non-catholic, non-specific)\",\n \"1063\": \"christian scientist\",\n \"1064\": \"church of christ\",\n \"1065\": \"church of god\",\n \"1014\": \"confucianism\",\n \"1066\": \"congregational\",\n \"1015\": \"cyberculture religions\",\n \"1067\": \"disciples of christ\",\n \"1016\": \"divination\",\n \"1068\": \"eastern orthodox\",\n \"1069\": \"episcopalian\",\n \"1070\": \"evangelical covenant\",\n \"1017\": \"fourth way\",\n \"1018\": \"free daism\",\n \"1071\": \"friends\",\n \"1072\": \"full gospel\",\n \"1019\": \"gnosis\",\n \"1020\": \"hinduism\",\n \"1021\": \"humanism\",\n \"1022\": \"independent\",\n \"1023\": \"islam\",\n \"1024\": \"jainism\",\n \"1025\": \"jehovah's witnesses\",\n \"1026\": \"judaism\",\n \"1027\": \"latter day saints\",\n \"1028\": \"lutheran\",\n \"1029\": \"mahayana\",\n \"1030\": \"meditation\",\n \"1031\": \"messianic judaism\",\n \"1073\": \"methodist\",\n \"1032\": \"mitraism\",\n \"1074\": \"native american\",\n \"1075\": \"nazarene\",\n \"1033\": \"new age\",\n \"1034\": \"non-roman catholic\",\n \"1035\": \"occult\",\n \"1036\": \"orthodox\",\n \"1037\": \"paganism\",\n \"1038\": \"pentecostal\",\n \"1076\": \"presbyterian\",\n \"1039\": \"process, the\",\n \"1077\": \"protestant\",\n \"1078\": \"protestant, no denomination\",\n \"1079\": \"reformed\",\n \"1040\": \"reformed/presbyterian\",\n \"1041\": \"roman catholic church\",\n \"1080\": \"salvation army\",\n \"1042\": \"satanism\",\n \"1043\": \"scientology\",\n \"1044\": \"shamanism\",\n \"1045\": \"shiite (islam)\",\n \"1046\": \"shinto\",\n \"1047\": \"sikism\",\n \"1048\": \"spiritualism\",\n \"1049\": \"sunni (islam)\",\n \"1050\": \"taoism\",\n \"1051\": \"theravada\",\n \"1081\": \"unitarian universalist\",\n \"1052\": \"unitarian-universalism\",\n \"1082\": \"united church of christ\",\n \"1053\": \"universal life church\",\n \"1054\": \"vajrayana (tibetan)\",\n \"1055\": \"veda\",\n \"1056\": \"voodoo\",\n \"1057\": \"wicca\",\n \"1058\": \"yaohushua\",\n \"1059\": \"zen buddhism\",\n \"1060\": \"zoroastrianism\"\n};\n\n/*\n * Race & Ethnicity (HL7 V3)\n * Full list at http://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.6.238\n * OID: 2.16.840.1.113883.6.238\n *\n * Abbreviated list closer to real usage at: (Race / Ethnicity)\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=67D34BBC-617F-DD11-B38D-00188B398520\n * https://phinvads.cdc.gov/vads/ViewValueSet.action?id=35D34BBC-617F-DD11-B38D-00188B398520\n */\nvar RACE_ETHNICITY_MAP = {\n '2028-9': 'asian',\n '2054-5': 'black or african american',\n '2135-2': 'hispanic or latino',\n '2076-8': 'native',\n '2186-5': 'not hispanic or latino',\n '2131-1': 'other',\n '2106-3': 'white'\n};\n\n/*\n * Role (HL7 V3)\n * https://phinvads.cdc.gov/vads/ViewCodeSystem.action?id=2.16.840.1.113883.5.111\n * OID: 2.16.840.1.113883.5.111\n */\nvar ROLE_MAP = {\n \"ACC\": \"accident site\",\n \"ACHFID\": \"accreditation location identifier\",\n \"ACTMIL\": \"active duty military\",\n \"ALL\": \"allergy clinic\",\n \"AMB\": \"ambulance\",\n \"AMPUT\": \"amputee clinic\",\n \"ANTIBIOT\": \"antibiotic\",\n \"ASSIST\": \"assistive non-person living subject\",\n \"AUNT\": \"aunt\",\n \"B\": \"blind\",\n \"BF\": \"beef\",\n \"BILL\": \"billing contact\",\n \"BIOTH\": \"biotherapeutic non-person living subject\",\n \"BL\": \"broiler\",\n \"BMTC\": \"bone marrow transplant clinic\",\n \"BMTU\": \"bone marrow transplant unit\",\n \"BR\": \"breeder\",\n \"BREAST\": \"breast clinic\",\n \"BRO\": \"brother\",\n \"BROINLAW\": \"brother-in-law\",\n \"C\": \"calibrator\",\n \"CANC\": \"child and adolescent neurology clinic\",\n \"CAPC\": \"child and adolescent psychiatry clinic\",\n \"CARD\": \"ambulatory health care facilities; clinic/center; rehabilitation: cardiac facilities\",\n \"CAS\": \"asylum seeker\",\n \"CASM\": \"single minor asylum seeker\",\n \"CATH\": \"cardiac catheterization lab\",\n \"CCO\": \"clinical companion\",\n \"CCU\": \"coronary care unit\",\n \"CHEST\": \"chest unit\",\n \"CHILD\": \"child\",\n \"CHLDADOPT\": \"adopted child\",\n \"CHLDFOST\": \"foster child\",\n \"CHLDINLAW\": \"child in-law\",\n \"CHR\": \"chronic care facility\",\n \"CLAIM\": \"claimant\",\n \"CN\": \"national\",\n \"CNRP\": \"non-country member without residence permit\",\n \"CNRPM\": \"non-country member minor without residence permit\",\n \"CO\": \"companion\",\n \"COAG\": \"coagulation clinic\",\n \"COCBEN\": \"continuity of coverage beneficiary\",\n \"COMM\": \"community location\",\n \"COMMUNITYLABORATORY\": \"community laboratory\",\n \"COUSN\": \"cousin\",\n \"CPCA\": \"permit card applicant\",\n \"CRIMEVIC\": \"crime victim\",\n \"CRP\": \"non-country member with residence permit\",\n \"CRPM\": \"non-country member minor with residence permit\",\n \"CRS\": \"colon and rectal surgery clinic\",\n \"CSC\": \"community service center\",\n \"CVDX\": \"cardiovascular diagnostics or therapeutics unit\",\n \"DA\": \"dairy\",\n \"DADDR\": \"delivery address\",\n \"DAU\": \"natural daughter\",\n \"DAUADOPT\": \"adopted daughter\",\n \"DAUC\": \"daughter\",\n \"DAUFOST\": \"foster daughter\",\n \"DAUINLAW\": \"daughter in-law\",\n \"DC\": \"therapeutic class\",\n \"DEBR\": \"debridement\",\n \"DERM\": \"dermatology clinic\",\n \"DIFFABL\": \"differently abled\",\n \"DOMPART\": \"domestic partner\",\n \"DPOWATT\": \"durable power of attorney\",\n \"DR\": \"draft\",\n \"DU\": \"dual\",\n \"DX\": \"diagnostics or therapeutics unit\",\n \"E\": \"electronic qc\",\n \"ECHO\": \"echocardiography lab\",\n \"ECON\": \"emergency contact\",\n \"ENDO\": \"endocrinology clinic\",\n \"ENDOS\": \"endoscopy lab\",\n \"ENROLBKR\": \"enrollment broker\",\n \"ENT\": \"otorhinolaryngology clinic\",\n \"EPIL\": \"epilepsy unit\",\n \"ER\": \"emergency room\",\n \"ERL\": \"enrollment\",\n \"ETU\": \"emergency trauma unit\",\n \"EXCEST\": \"executor of estate\",\n \"EXT\": \"extended family member\",\n \"F\": \"filler proficiency\",\n \"FAMDEP\": \"family dependent\",\n \"FAMMEMB\": \"family member\",\n \"FI\": \"fiber\",\n \"FMC\": \"family medicine clinic\",\n \"FRND\": \"unrelated friend\",\n \"FSTUD\": \"full-time student\",\n \"FTH\": \"father\",\n \"FTHINLAW\": \"father-in-law\",\n \"FULLINS\": \"fully insured coverage sponsor\",\n \"G\": \"group\",\n \"GACH\": \"hospitals; general acute care hospital\",\n \"GD\": \"generic drug\",\n \"GDF\": \"generic drug form\",\n \"GDS\": \"generic drug strength\",\n \"GDSF\": \"generic drug strength form\",\n \"GGRFTH\": \"great grandfather\",\n \"GGRMTH\": \"great grandmother\",\n \"GGRPRN\": \"great grandparent\",\n \"GI\": \"gastroenterology clinic\",\n \"GIDX\": \"gastroenterology diagnostics or therapeutics lab\",\n \"GIM\": \"general internal medicine clinic\",\n \"GRFTH\": \"grandfather\",\n \"GRMTH\": \"grandmother\",\n \"GRNDCHILD\": \"grandchild\",\n \"GRNDDAU\": \"granddaughter\",\n \"GRNDSON\": \"grandson\",\n \"GRPRN\": \"grandparent\",\n \"GT\": \"guarantor\",\n \"GUADLTM\": \"guardian ad lidem\",\n \"GUARD\": \"guardian\",\n \"GYN\": \"gynecology clinic\",\n \"HAND\": \"hand clinic\",\n \"HANDIC\": \"handicapped dependent\",\n \"HBRO\": \"half-brother\",\n \"HD\": \"hemodialysis unit\",\n \"HEM\": \"hematology clinic\",\n \"HLAB\": \"hospital laboratory\",\n \"HOMEHEALTH\": \"home health\",\n \"HOSP\": \"hospital\",\n \"HPOWATT\": \"healthcare power of attorney\",\n \"HRAD\": \"radiology unit\",\n \"HSIB\": \"half-sibling\",\n \"HSIS\": \"half-sister\",\n \"HTN\": \"hypertension clinic\",\n \"HU\": \"hospital unit\",\n \"HUSB\": \"husband\",\n \"HUSCS\": \"specimen collection site\",\n \"ICU\": \"intensive care unit\",\n \"IEC\": \"impairment evaluation center\",\n \"INDIG\": \"member of an indigenous people\",\n \"INFD\": \"infectious disease clinic\",\n \"INJ\": \"injured plaintiff\",\n \"INJWKR\": \"injured worker\",\n \"INLAB\": \"inpatient laboratory\",\n \"INPHARM\": \"inpatient pharmacy\",\n \"INV\": \"infertility clinic\",\n \"JURID\": \"jurisdiction location identifier\",\n \"L\": \"pool\",\n \"LABORATORY\": \"laboratory\",\n \"LOCHFID\": \"local location identifier\",\n \"LY\": \"layer\",\n \"LYMPH\": \"lympedema clinic\",\n \"MAUNT\": \"maternalaunt\",\n \"MBL\": \"medical laboratory\",\n \"MCOUSN\": \"maternalcousin\",\n \"MGDSF\": \"manufactured drug strength form\",\n \"MGEN\": \"medical genetics clinic\",\n \"MGGRFTH\": \"maternalgreatgrandfather\",\n \"MGGRMTH\": \"maternalgreatgrandmother\",\n \"MGGRPRN\": \"maternalgreatgrandparent\",\n \"MGRFTH\": \"maternalgrandfather\",\n \"MGRMTH\": \"maternalgrandmother\",\n \"MGRPRN\": \"maternalgrandparent\",\n \"MHSP\": \"military hospital\",\n \"MIL\": \"military\",\n \"MOBL\": \"mobile unit\",\n \"MT\": \"meat\",\n \"MTH\": \"mother\",\n \"MTHINLAW\": \"mother-in-law\",\n \"MU\": \"multiplier\",\n \"MUNCLE\": \"maternaluncle\",\n \"NBOR\": \"neighbor\",\n \"NBRO\": \"natural brother\",\n \"NCCF\": \"nursing or custodial care facility\",\n \"NCCS\": \"neurology critical care and stroke unit\",\n \"NCHILD\": \"natural child\",\n \"NEPH\": \"nephrology clinic\",\n \"NEPHEW\": \"nephew\",\n \"NEUR\": \"neurology clinic\",\n \"NFTH\": \"natural father\",\n \"NFTHF\": \"natural father of fetus\",\n \"NIECE\": \"niece\",\n \"NIENEPH\": \"niece/nephew\",\n \"NMTH\": \"natural mother\",\n \"NOK\": \"next of kin\",\n \"NPRN\": \"natural parent\",\n \"NS\": \"neurosurgery unit\",\n \"NSIB\": \"natural sibling\",\n \"NSIS\": \"natural sister\",\n \"O\": \"operator proficiency\",\n \"OB\": \"obstetrics clinic\",\n \"OF\": \"outpatient facility\",\n \"OMS\": \"oral and maxillofacial surgery clinic\",\n \"ONCL\": \"medical oncology clinic\",\n \"OPH\": \"opthalmology clinic\",\n \"OPTC\": \"optometry clinic\",\n \"ORG\": \"organizational contact\",\n \"ORTHO\": \"orthopedics clinic\",\n \"OUTLAB\": \"outpatient laboratory\",\n \"OUTPHARM\": \"outpatient pharmacy\",\n \"P\": \"patient\",\n \"PAINCL\": \"pain clinic\",\n \"PATHOLOGIST\": \"pathologist\",\n \"PAUNT\": \"paternalaunt\",\n \"PAYOR\": \"payor contact\",\n \"PC\": \"primary care clinic\",\n \"PCOUSN\": \"paternalcousin\",\n \"PEDC\": \"pediatrics clinic\",\n \"PEDCARD\": \"pediatric cardiology clinic\",\n \"PEDE\": \"pediatric endocrinology clinic\",\n \"PEDGI\": \"pediatric gastroenterology clinic\",\n \"PEDHEM\": \"pediatric hematology clinic\",\n \"PEDHO\": \"pediatric oncology clinic\",\n \"PEDICU\": \"pediatric intensive care unit\",\n \"PEDID\": \"pediatric infectious disease clinic\",\n \"PEDNEPH\": \"pediatric nephrology clinic\",\n \"PEDNICU\": \"pediatric neonatal intensive care unit\",\n \"PEDRHEUM\": \"pediatric rheumatology clinic\",\n \"PEDU\": \"pediatric unit\",\n \"PGGRFTH\": \"paternalgreatgrandfather\",\n \"PGGRMTH\": \"paternalgreatgrandmother\",\n \"PGGRPRN\": \"paternalgreatgrandparent\",\n \"PGRFTH\": \"paternalgrandfather\",\n \"PGRMTH\": \"paternalgrandmother\",\n \"PGRPRN\": \"paternalgrandparent\",\n \"PH\": \"policy holder\",\n \"PHARM\": \"pharmacy\",\n \"PHLEBOTOMIST\": \"phlebotomist\",\n \"PHU\": \"psychiatric hospital unit\",\n \"PL\": \"pleasure\",\n \"PLS\": \"plastic surgery clinic\",\n \"POD\": \"podiatry clinic\",\n \"POWATT\": \"power of attorney\",\n \"PRC\": \"pain rehabilitation center\",\n \"PREV\": \"preventive medicine clinic\",\n \"PRN\": \"parent\",\n \"PRNINLAW\": \"parent in-law\",\n \"PROCTO\": \"proctology clinic\",\n \"PROFF\": \"provider's office\",\n \"PROG\": \"program eligible\",\n \"PROS\": \"prosthodontics clinic\",\n \"PSI\": \"psychology clinic\",\n \"PSTUD\": \"part-time student\",\n \"PSY\": \"psychiatry clinic\",\n \"PSYCHF\": \"psychiatric care facility\",\n \"PT\": \"patient\",\n \"PTRES\": \"patient's residence\",\n \"PUNCLE\": \"paternaluncle\",\n \"Q\": \"quality control\",\n \"R\": \"replicate\",\n \"RADDX\": \"radiology diagnostics or therapeutics unit\",\n \"RADO\": \"radiation oncology unit\",\n \"RC\": \"racing\",\n \"RESPRSN\": \"responsible party\",\n \"RETIREE\": \"retiree\",\n \"RETMIL\": \"retired military\",\n \"RH\": \"rehabilitation hospital\",\n \"RHAT\": \"addiction treatment center\",\n \"RHEUM\": \"rheumatology clinic\",\n \"RHII\": \"intellectual impairment center\",\n \"RHMAD\": \"parents with adjustment difficulties center\",\n \"RHPI\": \"physical impairment center\",\n \"RHPIH\": \"physical impairment - hearing center\",\n \"RHPIMS\": \"physical impairment - motor skills center\",\n \"RHPIVS\": \"physical impairment - visual skills center\",\n \"RHU\": \"rehabilitation hospital unit\",\n \"RHYAD\": \"youths with adjustment difficulties center\",\n \"RNEU\": \"neuroradiology unit\",\n \"ROOM\": \"roommate\",\n \"RTF\": \"residential treatment facility\",\n \"SCHOOL\": \"school\",\n \"SCN\": \"screening\",\n \"SEE\": \"seeing\",\n \"SELF\": \"self\",\n \"SELFINS\": \"self insured coverage sponsor\",\n \"SH\": \"show\",\n \"SIB\": \"sibling\",\n \"SIBINLAW\": \"sibling in-law\",\n \"SIGOTHR\": \"significant other\",\n \"SIS\": \"sister\",\n \"SISINLAW\": \"sister-in-law\",\n \"SLEEP\": \"sleep disorders unit\",\n \"SNF\": \"skilled nursing facility\",\n \"SNIFF\": \"sniffing\",\n \"SON\": \"natural son\",\n \"SONADOPT\": \"adopted son\",\n \"SONC\": \"son\",\n \"SONFOST\": \"foster son\",\n \"SONINLAW\": \"son in-law\",\n \"SPMED\": \"sports medicine clinic\",\n \"SPON\": \"sponsored dependent\",\n \"SPOWATT\": \"special power of attorney\",\n \"SPS\": \"spouse\",\n \"STPBRO\": \"stepbrother\",\n \"STPCHLD\": \"step child\",\n \"STPDAU\": \"stepdaughter\",\n \"STPFTH\": \"stepfather\",\n \"STPMTH\": \"stepmother\",\n \"STPPRN\": \"step parent\",\n \"STPSIB\": \"step sibling\",\n \"STPSIS\": \"stepsister\",\n \"STPSON\": \"stepson\",\n \"STUD\": \"student\",\n \"SU\": \"surgery clinic\",\n \"SUBJECT\": \"self\",\n \"SURF\": \"substance use rehabilitation facility\",\n \"THIRDPARTY\": \"third party\",\n \"TPA\": \"third party administrator\",\n \"TR\": \"transplant clinic\",\n \"TRAVEL\": \"travel and geographic medicine clinic\",\n \"TRB\": \"tribal member\",\n \"UMO\": \"utilization management organization\",\n \"UNCLE\": \"uncle\",\n \"UPC\": \"underage protection center\",\n \"URO\": \"urology clinic\",\n \"V\": \"verifying\",\n \"VET\": \"veteran\",\n \"VL\": \"veal\",\n \"WARD\": \"ward\",\n \"WIFE\": \"wife\",\n \"WL\": \"wool\",\n \"WND\": \"wound clinic\",\n \"WO\": \"working\",\n \"WORK\": \"work site\",\n};\n\nvar PROBLEM_STATUS_MAP = {\n \"55561003\": \"active\",\n \"73425007\": \"inactive\",\n \"413322009\": \"resolved\"\n};\n\n\n// copied from _.invert to avoid making browser users include all of underscore\nvar invertKeys = function(obj) {\n var result = {};\n var keys = Object.keys(obj);\n for (var i = 0, length = keys.length; i < length; i++) {\n result[obj[keys[i]]] = keys[i];\n }\n return result;\n};\n\nvar lookupFnGenerator = function(map) {\n return function(key) {\n return map[key] || null;\n };\n};\nvar reverseLookupFnGenerator = function(map) {\n return function(key) {\n if (!key) { return null; }\n var invertedMap = invertKeys(map);\n key = key.toLowerCase();\n return invertedMap[key] || null;\n };\n};\n\n\nmodule.exports = {\n gender: lookupFnGenerator(GENDER_MAP),\n reverseGender: reverseLookupFnGenerator(GENDER_MAP),\n maritalStatus: lookupFnGenerator(MARITAL_STATUS_MAP),\n reverseMaritalStatus: reverseLookupFnGenerator(MARITAL_STATUS_MAP),\n religion: lookupFnGenerator(RELIGION_MAP),\n reverseReligion: reverseLookupFnGenerator(RELIGION_MAP),\n raceEthnicity: lookupFnGenerator(RACE_ETHNICITY_MAP),\n reverseRaceEthnicity: reverseLookupFnGenerator(RACE_ETHNICITY_MAP),\n role: lookupFnGenerator(ROLE_MAP),\n reverseRole: reverseLookupFnGenerator(ROLE_MAP),\n problemStatus: lookupFnGenerator(PROBLEM_STATUS_MAP),\n reverseProblemStatus: reverseLookupFnGenerator(PROBLEM_STATUS_MAP)\n};\n","module.exports = {\n stripWhitespace: stripWhitespace\n}\n\nfunction stripWhitespace (str) {\n if (!str) { return str; }\n return str.trim();\n};\n","/*\n * ...\n */\nvar { stripWhitespace } = require('./common');\n/*\n * A function used to wrap DOM elements in an object so methods can be added\n * to the element object. IE8 does not allow methods to be added directly to\n * DOM objects.\n */\nvar wrapElement = function (el) {\n function wrapElementHelper(currentEl) {\n return {\n el: currentEl,\n template: template,\n content: content,\n tag: tag,\n immediateChildTag: immediateChildTag,\n elsByTag: elsByTag,\n attr: attr,\n boolAttr: boolAttr,\n val: val,\n isEmpty: isEmpty\n };\n }\n \n // el is an array of elements\n if (el.length) {\n var els = [];\n for (var i = 0; i < el.length; i++) {\n els.push(wrapElementHelper(el[i]));\n }\n return els;\n \n // el is a single element\n } else {\n return wrapElementHelper(el);\n }\n};\n\n\n/*\n * Find element by tag name, then attribute value.\n */\nvar tagAttrVal = function (el, tag, attr, value) {\n el = el.getElementsByTagName(tag);\n for (var i = 0; i < el.length; i++) {\n if (el[i].getAttribute(attr) === value) {\n return el[i];\n }\n }\n};\n\n\n/*\n * Search for a template ID, and return its parent element.\n * Example:\n * <templateId root=\"2.16.840.1.113883.10.20.22.2.17\"/>\n * Can be found using:\n * el = dom.template('2.16.840.1.113883.10.20.22.2.17');\n */\nvar template = function (templateId) {\n var el = tagAttrVal(this.el, 'templateId', 'root', templateId);\n if (!el) {\n return emptyEl();\n } else {\n return wrapElement(el.parentNode);\n }\n};\n\n/*\n * Search for a content tag by \"ID\", and return it as an element.\n * These are used in the unstructured versions of each section but\n * referenced from the structured version sometimes.\n * Example:\n * <content ID=\"UniqueNameReferencedElsewhere\"/>\n * Can be found using:\n * el = dom.content('UniqueNameReferencedElsewhere');\n *\n * We can't use `getElementById` because `ID` (the standard attribute name\n * in this context) is not the same attribute as `id` in XML, so there are no matches\n */\nvar content = function (contentId) {\n var el = tagAttrVal(this.el, 'content', 'ID', contentId);\n if (!el) {\n // check the <td> tag too, which isn't really correct but\n // will inevitably be used sometimes because it looks like very\n // normal HTML to put the data directly in a <td>\n el = tagAttrVal(this.el, 'td', 'ID', contentId);\n }\n if (!el) {\n // Ugh, Epic uses really non-standard locations.\n el = tagAttrVal(this.el, 'caption', 'ID', contentId) ||\n tagAttrVal(this.el, 'paragraph', 'ID', contentId) ||\n tagAttrVal(this.el, 'tr', 'ID', contentId) ||\n tagAttrVal(this.el, 'item', 'ID', contentId);\n }\n\n if (!el) {\n return emptyEl();\n } else {\n return wrapElement(el);\n }\n };\n\n\n/*\n * Search for the first occurrence of an element by tag name.\n */\nvar tag = function (tag) {\n var el = this.el.getElementsByTagName(tag)[0];\n if (!el) {\n return emptyEl();\n } else {\n return wrapElement(el);\n }\n};\n\n/*\n * Like `tag`, except it will only count a tag that is an immediate child of `this`.\n * This is useful for tags like \"text\" which A. may not be present for a given location\n * in every document and B. have a very different meaning depending on their positioning\n *\n * <parent>\n * <target></target>\n * </parent>\n * vs.\n * <parent>\n * <intermediate>\n * <target></target>\n * </intermediate>\n * </parent>\n * parent.immediateChildTag('target') will have a result in the first case but not in the second.\n */\nvar immediateChildTag = function (tag) {\n var els = this.el.getElementsByTagName(tag);\n if (!els) { return null; }\n for (var i = 0; i < els.length; i++) {\n if (els[i].parentNode === this.el) {\n return wrapElement(els[i]);\n }\n }\n return emptyEl();\n};\n\n\n/*\n * Search for all elements by tag name.\n */\nvar elsByTag = function (tag) {\n return wrapElement(this.el.getElementsByTagName(tag));\n};\n\n\nvar unescapeSpecialChars = function(s) {\n if (!s) { return s; }\n return s.replace(/\\</g, '<')\n .replace(/\\>/g, '>')\n .replace(/\\"/g, '\"')\n .replace(/\\'/g, \"'\")\n .replace(/\\&/g, '&');\n};\n\n\n/*\n * Retrieve the element's attribute value. Example:\n * value = el.attr('displayName');\n *\n * The browser and jsdom return \"null\" for empty attributes;\n * xmldom (which we now use because it's faster / can be explicitly\n * told to parse malformed XML as XML anyways), return the empty\n * string instead, so we fix that here.\n */\nvar attr = function (attrName) {\n if (!this.el) { return null; }\n var attrVal = this.el.getAttribute(attrName);\n if (attrVal) {\n return unescapeSpecialChars(attrVal);\n }\n return null;\n};\n\n/*\n * Wrapper for attr() for retrieving boolean attributes;\n * a raw call attr() will return Strings, which can be unexpected,\n * since the string 'false' will by truthy\n */\nvar boolAttr = function (attrName) {\n var rawAttr = this.attr(attrName);\n if (rawAttr === 'true' || rawAttr === '1') {\n return true;\n }\n return false;\n};\n\n/*\n * Retrieve the element's value. For example, if the element is:\n * <city>Madison</city>\n * Use:\n * value = el.tag('city').val();\n *\n * This function also knows how to retrieve the value of <reference> tags,\n * which can store their content in a <content> tag in a totally different\n * part of the document.\n */\nvar val = function (html) {\n if (!this.el) { return null; }\n if (!this.el.childNodes || !this.el.childNodes.length) { return null; }\n \n var textContent;\n if (html) {\n textContent = this.el.innerHTML;\n if (!textContent && root.XMLSerializer)\n textContent = new XMLSerializer().serializeToString(this.el);\n } else {\n textContent = this.el.textContent;\n }\n\n // if there's no text value here and the only thing inside is a\n // <reference> tag, see if there's a linked <content> tag we can\n // get something out of\n if (!stripWhitespace(textContent)) {\n\n var contentId;\n // \"no text value\" might mean there's just a reference tag\n if (this.el.childNodes.length === 1 &&\n this.el.childNodes[0].tagName === 'reference') {\n contentId = this.el.childNodes[0].getAttribute('value');\n\n // or maybe a newlines on top/above the reference tag\n } else if (this.el.childNodes.length === 3 &&\n this.el.childNodes[1].tagName === 'reference') {\n contentId = this.el.childNodes[1].getAttribute('value');\n\n } else {\n return unescapeSpecialChars(textContent);\n }\n\n if (contentId && contentId[0] === '#') {\n contentId = contentId.slice(1); // get rid of the '#'\n var docRoot = wrapElement(this.el.ownerDocument);\n var contentTag = docRoot.content(contentId);\n return contentTag.val();\n }\n }\n\n return unescapeSpecialChars(textContent);\n};\n\n\n/*\n * Creates and returns an empty DOM element with tag name \"empty\":\n * <empty></empty>\n */\nvar emptyEl = function () {\n var el = doc.createElement('empty');\n return wrapElement(el);\n};\n\n\n/*\n * Determines if the element is empty, i.e.:\n * <empty></empty>\n * This element is created by function `emptyEL`.\n */\nvar isEmpty = function () {\n if (this.el.tagName.toLowerCase() === 'empty') {\n return true;\n } else {\n return false;\n }\n};\n\n\n/*\n * Cross-browser XML parsing supporting IE8+ and Node.js.\n */\nfunction parse(data) {\n // XML data must be a string\n if (!data || typeof data !== \"string\") {\n console.log(\"BB Error: XML data is not a string\");\n return null;\n }\n \n var xml, parser;\n \n // Node\n if (isNode) {\n parser = new (xmldom.DOMParser)();\n xml = parser.parseFromString(data, \"text/xml\");\n \n // Browser\n } else {\n \n // Standard parser\n if (window.DOMParser) {\n parser = new DOMParser();\n xml = parser.parseFromString(data, \"text/xml\");\n \n // IE\n } else {\n try {\n xml = new ActiveXObject(\"Microsoft.XMLDOM\");\n xml.async = \"false\";\n xml.loadXML(data);\n } catch (e) {\n console.log(\"BB ActiveX Exception: Could not parse XML\");\n }\n }\n }\n \n if (!xml || !xml.documentElement || xml.getElementsByTagName(\"parsererror\").length) {\n console.log(\"BB Error: Could not parse XML\");\n return null;\n }\n \n return wrapElement(xml);\n};\n\n\n// Establish the root object, `window` in the browser, or `global` in Node.\nvar root = window || global,\n xmldom,\n isNode = false,\n doc = root.document; // Will be `undefined` if we're in Node\n\n// Check if we're in Node. If so, pull in `xmldom` so we can simulate the DOM.\nif (typeof process === 'object' && Object.prototype.toString.call(process) === '[object process]') {\n isNode = true;\n xmldom = require(\"@xmldom/xmldom\");\n doc = new xmldom.DOMImplementation().createDocument();\n}\n\nmodule.exports = {\n parse: parse\n};\n","/*\n * ...\n */\nvar C32 = require('./documents/c32');\nvar CCD = require('./documents/ccd');\nvar CCDA = require('./documents/ccda');\nvar CCDAR2 = require('./documents/ccdar2');\n\nmodule.exports = function() {\n var self = this;\n\n self.detect = detect;\n self.entries = entries;\n self.parseDate = parseDate;\n self.parseName = parseName;\n self.parseAddress = parseAddress;\n self.C32 = new C32(getEntries);\n self.CCD = new CCD(getEntries);\n self.CCDA = new CCDA(getEntries);\n self.CCDAR2 = new CCDAR2(getEntries);\n};\n\nfunction getEntries() {\n return entries;\n};\n\nfunction detect(data) {\n if (!data.template) {\n return 'json';\n }\n \n if (!data.template('2.16.840.1.113883.3.88.11.32.1').isEmpty()) {\n return 'c32';\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.1').isEmpty()) {\n return 'ccda';\n } else if(!data.template('2.16.840.1.113883.10.20.22.1.15').isEmpty()) {\n return 'ccdar2';\n }else if(!data.template('2.16.840.1.113883.10.20.22.1.2').isEmpty()) {\n return 'ccd';\n }\n};\n\n\n/*\n * Get entries within an element (with tag name 'entry'), adds an `each` function\n */\nfunction entries() {\n var each = function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback(this[i]);\n }\n };\n \n var els = this.elsByTag('entry');\n els.each = each;\n return els;\n};\n\n\n/*\n * Parses an HL7 date in String form and creates a new Date object.\n * \n * TODO: CCDA dates can be in form:\n * <effectiveTime value=\"20130703094812\"/>\n * ...or:\n * <effectiveTime>\n * <low value=\"19630617120000\"/>\n * <high value=\"20110207100000\"/>\n * </effectiveTime>\n * For the latter, parseDate will not be given type `String`\n * and will return `null`.\n */\nfunction parseDate(str) {\n if (!str || typeof str !== 'string') {\n return null;\n }\n\n // Note: months start at 0 (so January is month 0)\n\n // e.g., value=\"1999\" translates to Jan 1, 1999\n if (str.length === 4) {\n return new Date(str, 0, 1);\n }\n\n var year = str.substr(0, 4);\n // subtract 1 from the month since they're zero-indexed\n var month = parseInt(str.substr(4, 2), 10) - 1;\n // days are not zero-indexed. If we end up with the day 0 or '',\n // that will be equivalent to the last day of the previous month\n var day = str.substr(6, 2) || 1;\n\n // check for time info (the presence of at least hours and mins after the date)\n if (str.length >= 12) {\n var hour = str.substr(8, 2);\n var min = str.substr(10, 2);\n var secs = str.substr(12, 2);\n\n // check for timezone info (the presence of chars after the seconds place)\n if (str.length > 14) {\n // _utcOffsetFromString will return 0 if there's no utc offset found.\n var utcOffset = _utcOffsetFromString(str.substr(14));\n // We subtract that offset from the local time to get back to UTC\n // (e.g., if we're -480 mins behind UTC, we add 480 mins to get back to UTC)\n min = _toInt(min) - utcOffset;\n }\n\n var date = new Date(Date.UTC(year, month, day, hour, min, secs));\n // This flag lets us output datetime-precision in our JSON even if the time happens\n // to translate to midnight local time. If we clone the date object, it is not\n // guaranteed to survive.\n date._parsedWithTimeData = true;\n return date;\n }\n\n return new Date(year, month, day);\n};\n\n// These regexes and the two functions below are copied from moment.js\n// http://momentjs.com/\n// https://github.com/moment/moment/blob/develop/LICENSE\nvar parseTimezoneChunker = /([\\+\\-]|\\d\\d)/gi;\nvar parseTokenTimezone = /Z|[\\+\\-]\\d\\d:?\\d\\d/gi; // +00:00 -00:00 +0000 -0000 or Z\nfunction _utcOffsetFromString(string) {\n string = string || '';\n var possibleTzMatches = (string.match(parseTokenTimezone) || []),\n tzChunk = possibleTzMatches[possibleTzMatches.length - 1] || [],\n parts = (tzChunk + '').match(parseTimezoneChunker) || ['-', 0, 0],\n minutes = +(parts[1] * 60) + _toInt(parts[2]);\n\n return parts[0] === '+' ? minutes : -minutes;\n}\nfunction _toInt(argumentForCoercion) {\n var coercedNumber = +argumentForCoercion,\n value = 0;\n\n if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n if (coercedNumber >= 0) {\n value = Math.floor(coercedNumber);\n } else {\n value = Math.ceil(coercedNumber);\n }\n }\n\n return value;\n}\n\n\n/*\n * Parses an HL7 name (prefix / given [] / family)\n */\nfunction parseName(nameEl) {\n var prefix = nameEl.tag('prefix').val();\n \n var els = nameEl.elsByTag('given');\n var given = [];\n for (var i = 0; i < els.length; i++) {\n var val = els[i].val();\n if (val) { given.push(val); }\n }\n \n var family = nameEl.tag('family').val();\n \n return {\n prefix: prefix,\n given: given,\n family: family\n };\n};\n\n\n/*\n * Parses an HL7 address (streetAddressLine [], city, state, postalCode, country)\n */\nfunction parseAddress(addrEl) {\n var els = addrEl.elsByTag('streetAddressLine');\n var street = [];\n \n for (var i = 0; i < els.length; i++) {\n var val = els[i].val();\n if (val) { street.push(val); }\n }\n \n var city = addrEl.tag('city').val(),\n state = addrEl.tag('state').val(),\n zip = addrEl.tag('postalCode').val(),\n country = addrEl.tag('country').val();\n \n return {\n street: street,\n city: city,\n state: state,\n zip: zip,\n country: country\n };\n};\n","/*\n * ...\n */\n \nmodule.exports = function(getEntries) {\n var self = this;\n\n self.getEntries = getEntries;\n self.process = process;\n self.section = section;\n\n /*\n * Preprocesses the C32 document\n */\n function process(c32) {\n c32.section = section;\n return c32;\n };\n\n /*\n * Finds the section of a C32 document\n *\n * Usually we check first for the HITSP section ID and then for the HL7-CCD ID.\n */\n function section(name) {\n var el, entries = self.getEntries();\n \n switch (name) {\n case 'document':\n return this.template('2.16.840.1.113883.3.88.11.32.1');\n case 'allergies':\n el = this.template('2.16.840.1.113883.3.88.11.83.102');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.2');\n }\n el.entries = entries;\n return el;\n case 'demographics':\n return this.template('2.16.840.1.113883.3.88.11.32.1');\n case 'encounters':\n el = this.template('2.16.840.1.113883.3.88.11.83.127');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.3');\n }\n el.entries = entries;\n return el;\n case 'immunizations':\n el = this.template('2.16.840.1.113883.3.88.11.83.117');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.6');\n }\n el.entries = entries;\n return el;\n case 'results':\n el = this.template('2.16.840.1.113883.3.88.11.83.122');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.14');\n }\n el.entries = entries;\n return el;\n case 'medications':\n el = this.template('2.16.840.1.113883.3.88.11.83.112');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.8');\n }\n el.entries = entries;\n return el;\n case 'problems':\n el = this.template('2.16.840.1.113883.3.88.11.83.103');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.11');\n }\n el.entries = entries;\n return el;\n case 'procedures':\n el = this.template('2.16.840.1.113883.3.88.11.83.108');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.12');\n }\n el.entries = entries;\n return el;\n case 'vitals':\n el = this.template('2.16.840.1.113883.3.88.11.83.119');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.1.16');\n }\n el.entries = entries;\n return el;\n }\n \n return null;\n };\n};\n","/*\n * ...\n */\n\nmodule.exports = function (getEntries) {\n var self = this;\n self.getEntries = getEntries;\n\n self.process = process;\n self.section = section;\n\n /*\n * Preprocesses the CCDAR2 document\n */\n function process(ccda) {\n ccda.section = section;\n return ccda;\n };\n\n /*\n * Finds the section of a CCDA document\n */\n function section(name) {\n var el, entries = self.getEntries();\n\n switch (name) {\n case 'document':\n return this.template('2.16.840.1.113883.10.20.22.1.2');\n case 'demographics':\n return this.template('2.16.840.1.113883.10.20.22.1.2');\n case 'health_concerns_document':\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\n el.entries = entries;\n return el;\n case 'goals':\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\n el.entries = entries;\n return el;\n case 'interventions':\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\n el.entries = entries;\n return el;\n case 'health_status_outcomes':\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\n el.entries = entries;\n return el;\n }\n\n return null;\n };\n}\n","/*\n * ...\n */\n\nmodule.exports = function (getEntries) {\n var self = this;\n\n self.getEntries = getEntries;\n self.process = process;\n self.section = section;\n \n /*\n * Preprocesses the CCDA document\n */\n function process(ccda) {\n ccda.section = section;\n return ccda;\n }; \n \n /*\n * Finds the section of a CCDA document\n */\n function section(name) {\n var el, entries = self.getEntries();\n \n switch (name) {\n case 'document':\n return this.template('2.16.840.1.113883.10.20.22.1.1');\n case 'allergies':\n el = this.template('2.16.840.1.113883.10.20.22.2.6.1');\n el.entries = entries;\n return el;\n case 'care_plan':\n el = this.template('2.16.840.1.113883.10.20.22.2.10');\n el.entries = entries;\n return el;\n case 'chief_complaint':\n el = this.template('2.16.840.1.113883.10.20.22.2.13');\n if (el.isEmpty()) {\n el = this.template('1.3.6.1.4.1.19376.1.5.3.1.1.13.2.1');\n }\n // no entries in Chief Complaint\n return el;\n case 'demographics':\n return this.template('2.16.840.1.113883.10.20.22.1.1');\n case 'encounters':\n el = this.template('2.16.840.1.113883.10.20.22.2.22');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.22.2.22.1');\n }\n el.entries = entries;\n return el;\n case 'functional_statuses':\n el = this.template('2.16.840.1.113883.10.20.22.2.14');\n el.entries = entries;\n return el;\n case 'immunizations':\n el = this.template('2.16.840.1.113883.10.20.22.2.2.1');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.22.2.2');\n }\n el.entries = entries;\n return el;\n case 'instructions':\n el = this.template('2.16.840.1.113883.10.20.22.2.45');\n el.entries = entries;\n return el;\n case 'results':\n el = this.template('2.16.840.1.113883.10.20.22.2.3.1');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.22.2.3');\n }\n el.entries = entries;\n return el;\n case 'medications':\n el = this.template('2.16.840.1.113883.10.20.22.2.1.1');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.22.2.1');\n }\n el.entries = entries;\n return el;\n case 'problems':\n el = this.template('2.16.840.1.113883.10.20.22.2.5.1');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.22.2.5');\n }\n el.entries = entries;\n return el;\n case 'procedures':\n el = this.template('2.16.840.1.113883.10.20.22.2.7.1');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.22.2.7');\n }\n el.entries = entries;\n return el;\n case 'social_history':\n el = this.template('2.16.840.1.113883.10.20.22.2.17');\n el.entries = entries;\n return el;\n case 'vitals':\n el = this.template('2.16.840.1.113883.10.20.22.2.4.1');\n if (el.isEmpty()) {\n el = this.template('2.16.840.1.113883.10.20.22.2.4');\n }\n el.entries = entries;\n return el;\n }\n \n return null;\n }; \n};\n","/*\n * ...\n */\n\nmodule.exports = function (getEntries) {\n var self = this;\n self.getEntries = getEntries;\n \n self.process = process;\n self.section = section; \n\n /*\n * Preprocesses the CCDAR2 document\n */\n function process(ccda) {\n ccda.section = section;\n return ccda;\n };\n\n /*\n * Finds the section of a CCDA document\n */\n function section(name) {\n var el, entries = self.getEntries();\n\n switch (name) {\n case 'document':\n return this.template('2.16.840.1.113883.10.20.22.1.15');\n case 'demographics':\n return this.template('2.16.840.1.113883.10.20.22.1.15');\n case 'health_concerns_document':\n el = this.template('2.16.840.1.113883.10.20.22.2.58');\n el.entries = entries;\n return el;\n case 'goals':\n el = this.template('2.16.840.1.113883.10.20.22.2.60');\n el.entries = entries;\n return el;\n case 'interventions':\n el = this.template('2.16.840.1.113883.10.20.21.2.3');\n el.entries = entries;\n return el;\n case 'health_status_outcomes':\n el = this.template('2.16.840.1.113883.10.20.22.2.61');\n el.entries = entries;\n return el;\n }\n\n return null;\n };\n}\n","/*\n * ...\n */\n\nvar C32 = require('./generators/c32');\nvar CCDA = require('./generators/ccda');\n\nvar method = function () {};\n\n/* exported Generators */\nmodule.exports = {\n method: method,\n C32: C32,\n CCDA: CCDA\n};\n \n\n\n /* Import ejs if we're in Node. Then setup custom formatting filters\n */\n /*if (typeof exports !== 'undefined') {\n if (typeof module !== 'undefined' && module.exports) {\n ejs = require(\"ejs\");\n }\n }\n\n if (typeof ejs !== 'undefined') {\n /* Filters are automatically available to ejs to be used like \"... | hl7Date\"\n * Helpers are functions that we'll manually pass in to ejs.\n * The intended distinction is that a helper gets called with regular function-call syntax\n */ /*\n var pad = function(number) {\n if (number < 10) {\n return '0' + number;\n }\n return String(number);\n };\n\n ejs.filters.hl7Date = function(obj) {\n try {\n if (obj === null || obj === undefined) { return 'nullFlavor=\"UNK\"'; }\n var date = new Date(obj);\n if (isNaN(date.getTime())) { return obj; }\n\n var dateStr = null;\n if (date.getHours() || date.getMinutes() || date.getSeconds()) {\n // If there's a meaningful time, output a UTC datetime\n dateStr = date.getUTCFullYear() +\n pad( date.getUTCMonth() + 1 ) +\n pad( date.getUTCDate() );\n var timeStr = pad( date.getUTCHours() ) +\n pad( date.getUTCMinutes() ) +\n pad ( date.getUTCSeconds() ) +\n \"+0000\";\n return 'value=\"' + dateStr + timeStr + '\"';\n \n } else {\n // If there's no time, don't apply timezone tranformations: just output a date\n dateStr = String(date.getFullYear()) +\n pad( date.getMonth() + 1 ) +\n pad( date.getDate() );\n return 'value=\"' + dateStr + '\"';\n }\n\n } catch (e) {\n return obj;\n }\n };\n\n var escapeSpecialChars = function(s) {\n return s.replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/&/g, '&')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n };\n\n ejs.filters.hl7Code = function(obj) {\n if (!obj) { return ''; }\n\n var tag = '';\n var name = obj.name || '';\n if (obj.name) { tag += 'displayName=\"'+escapeSpecialChars(name)+'\"'; }\n\n if (obj.code) {\n tag += ' code=\"'+obj.code+'\"';\n if (obj.code_system) { tag += ' codeSystem=\"'+escapeSpecialChars(obj.code_system)+'\"'; }\n if (obj.code_system_name) { tag += ' codeSystemName=\"' +\n escapeSpecialChars(obj.code_system_name)+'\"'; }\n } else {\n tag += ' nullFlavor=\"UNK\"';\n }\n\n if (!obj.name && ! obj.code) {\n return 'nullFlavor=\"UNK\"';\n }\n \n return tag;\n };\n\n ejs.filters.emptyStringIfFalsy = function(obj) {\n if (!obj) { return ''; }\n return obj;\n };\n\n if (!ejs.helpers) ejs.helpers = {};\n ejs.helpers.simpleTag = function(tagName, value) {\n if (value) {\n return \"<\"+tagName+\">\"+value+\"</\"+tagName+\">\";\n } else {\n return \"<\"+tagName+\" nullFlavor=\\\"UNK\\\" />\";\n }\n };\n\n ejs.helpers.addressTags = function(addressDict) {\n if (!addressDict) {\n return '<streetAddressLine nullFlavor=\"NI\" />\\n' +\n '<city nullFlavor=\"NI\" />\\n' +\n '<state nullFlavor=\"NI\" />\\n' +\n '<postalCode nullFlavor=\"NI\" />\\n' +\n '<country nullFlavor=\"NI\" />\\n';\n }\n \n var tags = '';\n if (!addressDict.street.length) {\n tags += ejs.helpers.simpleTag('streetAddressLine', null) + '\\n';\n } else {\n for (var i=0; i<addressDict.street.length; i++) {\n tags += ejs.helpers.simpleTag('streetAddressLine', addressDict.street[i]) + '\\n';\n }\n }\n tags += ejs.helpers.simpleTag('city', addressDict.city) + '\\n';\n tags += ejs.helpers.simpleTag('state', addressDict.state) + '\\n';\n tags += ejs.helpers.simpleTag('postalCode', addressDict.zip) + '\\n';\n tags += ejs.helpers.simpleTag('country', addressDict.country) + '\\n';\n return tags;\n };\n\n ejs.helpers.nameTags = function(nameDict) {\n if (!nameDict) {\n return '<given nullFlavor=\"NI\" />\\n' +\n '<family nullFlavor=\"NI\" />\\n';\n }\n\n var tags = '';\n if (nameDict.prefix) {\n tags += ejs.helpers.simpleTag('prefix', nameDict.prefix) + '\\n';\n }\n if (!nameDict.given.length) {\n tags += ejs.helpers.simpleTag('given', null) + '\\n';\n } else {\n for (var i=0; i<nameDict.given.length; i++) {\n tags += ejs.helpers.simpleTag('given', nameDict.given[i]) + '\\n';\n }\n }\n tags += ejs.helpers.simpleTag('family', nameDict.family) + '\\n';\n if (nameDict.suffix) {\n tags += ejs.helpers.simpleTag('suffix', nameDict.suffix) + '\\n';\n }\n return tags;\n };\n\n }*/\n","/*\n * ...\n */\n\nmodule.exports = {\n run: run\n};\n \n/*\n * Generates a C32 document\n */\nfunction run(json, template, testingMode) {\n /* jshint unused: false */ // only until this stub is actually implemented\n console.log(\"C32 generation is not implemented yet\");\n return null;\n};","/*\n * ...\n */\nvar _ = require('lodash');\n\nmodule.exports = {\n run: run\n};\n \n/*\n * Generates a CCDA document\n * A lot of the EJS setup happens in generators.js\n *\n * If `testingMode` is true, we'll set the \"now\" variable to a specific,\n * fixed time, so that the expected XML doesn't change across runs\n */\nfunction run(json, template, testingMode) {\n if (!template) {\n console.log(\"Please provide a template EJS file for the Generator to use. \" +\n \"Load it via fs.readFileSync in Node or XHR in the browser.\");\n return null;\n }\n\n // `now` is actually now, unless we're running this for a test,\n // in which case it's always Jan 1, 2000 at 12PM UTC\n var now = (testingMode) ?\n new Date('2000-01-01T12:00:00Z') : new Date();\n\n var ccda = _.template(template, {\n filename: 'ccda.xml',\n bb: json,\n now: now,\n tagHelpers: ejs.helpers,\n codes: Core.Codes\n });\n return ccda;\n};","/*\n * ...\n */\nvar C32 = require('./parsers/c32');\nvar CCD = require('./parsers/ccd');\nvar CCDA = require('./parsers/ccda');\nvar CCDAR2 = require('./parsers/ccdar2');\n\nvar method = function () {};\n\n/* exported Parsers */\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.method = method;\n self.C32 = new C32(self.doc);\n self.CCD = new CCD(self.doc);\n self.CCDA = new CCDA(self.doc);\n self.CCDAR2 = new CCDAR2(self.doc);\n}; ","/*\n * Parser for the C32 document\n */\n\nvar Core = require('../core');\nvar AllergiesParser = require('./c32/allergies');\nvar DemographicsParser = require('./c32/demographics');\nvar DocumentParser = require('./c32/document');\nvar EncountersParser = require('./c32/encounters');\nvar ImmunizationsParser = require('./c32/immunizations');\nvar MedicationsParser = require('./c32/medications');\nvar ProblemsParser = require('./c32/problems');\nvar ProceduresParser = require('./c32/procedures');\nvar ResultsParser = require('./c32/results');\nvar VitalsParser = require('./c32/vitals');\nvar ParseGenericInfo = require('./generic');\n\nmodule.exports = function(doc) {\n var self = this;\n\n self.doc = doc;\n self.allergiesParser = new AllergiesParser(self.doc);\n self.demographicsParser = new DemographicsParser(self.doc);\n self.demographicsParser = new DocumentParser(self.doc);\n self.encountersParser = new EncountersParser(self.doc);\n self.immunizationsParser = new ImmunizationsParser(self.doc);\n self.medicationsParser = new MedicationsParser(self.doc);\n self.problemsParser = new ProblemsParser(self.doc);\n self.proceduresParser = new ProceduresParser(self.doc);\n self.resultsParser = new ResultsParser(self.doc);\n self.vitalsParser = new VitalsParser(self.doc);\n\n self.run = function (c32) {\n var data = {};\n \n data.document = self.demographicsParser.parse(c32);\n data.allergies = self.allergiesParser.parse(c32);\n data.demographics = self.demographicsParser.parse(c32);\n data.encounters = self.encountersParser.parse(c32);\n var parsedImmunizations = self.immunizationsParser.parse(c32);\n data.immunizations = parsedImmunizations.administered;\n data.immunization_declines = parsedImmunizations.declined;\n data.results = self.resultsParser.parse(c32);\n data.medications = self.medicationsParser.parse(c32);\n data.problems = self.problemsParser.parse(c32);\n data.procedures = self.proceduresParser.parse(c32);\n data.vitals = self.vitals.parse(c32);\n \n data.json = Core.json;\n data.document.json = Core.json;\n data.allergies.json = Core.json;\n data.demographics.json = Core.json;\n data.encounters.json = Core.json;\n data.immunizations.json = Core.json;\n data.immunization_declines.json = Core.json;\n data.results.json = Core.json;\n data.medications.json = Core.json;\n data.problems.json = Core.json;\n data.procedures.json = Core.json;\n data.vitals.json = Core.json;\n \n // Sections that are in CCDA but not C32... we want to keep the API\n // consistent, even if the entries are always null\n data.smoking_status = {\n date: null,\n name: null,\n code: null,\n code_system: null,\n code_system_name: null\n };\n data.smoking_status.json = Core.json;\n \n data.chief_complaint = {\n text: null\n };\n data.chief_complaint.json = Core.json;\n \n data.care_plan = [];\n data.care_plan.json = Core.json;\n \n data.instructions = [];\n data.instructions.json = Core.json;\n \n data.functional_statuses = [];\n data.functional_statuses.json = Core.json;\n \n // Decorate each section with Title, templateId and text and adds missing sections\n ParseGenericInfo(c32, data);\n \n return data;\n };\n};\n\n\n","/*\n * Parser for the C32 allergies section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var allergies = c32.section('allergies');\n\n var data = {}, el;\n data.entries = [];\n data.displayName = \"Allergies\";\n data.templateId = allergies.tag('templateId').attr('root');\n data.text = allergies.tag('text').val(true);\n\n allergies.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var start_date = parseDate(el.tag('low').attr('value')),\n end_date = parseDate(el.tag('high').attr('value'));\n \n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n // value => reaction_type\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('value');\n var reaction_type_name = el.attr('displayName'),\n reaction_type_code = el.attr('code'),\n reaction_type_code_system = el.attr('codeSystem'),\n reaction_type_code_system_name = el.attr('codeSystemName');\n \n // reaction\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('value');\n var reaction_name = el.attr('displayName'),\n reaction_code = el.attr('code'),\n reaction_code_system = el.attr('codeSystem');\n \n // an irregularity seen in some c32s\n if (!reaction_name) {\n el = entry.template('2.16.840.1.113883.10.20.1.54').tag('text');\n if (!el.isEmpty()) {\n reaction_name = Core.stripWhitespace(el.val());\n }\n }\n\n // severity\n el = entry.template('2.16.840.1.113883.10.20.1.55').tag('value');\n var severity = el.attr('displayName');\n \n // participant => allergen\n el = entry.tag('participant').tag('code');\n var allergen_name = el.attr('displayName'),\n allergen_code = el.attr('code'),\n allergen_code_system = el.attr('codeSystem'),\n allergen_code_system_name = el.attr('codeSystemName');\n\n // another irregularity seen in some c32s\n if (!allergen_name) {\n el = entry.tag('participant').tag('name');\n if (!el.isEmpty()) {\n allergen_name = el.val();\n }\n }\n if (!allergen_name) {\n el = entry.template('2.16.840.1.113883.3.88.11.83.6').tag('originalText');\n if (!el.isEmpty()) {\n allergen_name = Core.stripWhitespace(el.val());\n }\n }\n \n // status\n el = entry.template('2.16.840.1.113883.10.20.1.39').tag('value');\n var status = el.attr('displayName');\n \n data.entries.push({\n date_range: {\n start: start_date,\n end: end_date\n },\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n status: status,\n severity: severity,\n reaction: {\n name: reaction_name,\n code: reaction_code,\n code_system: reaction_code_system\n },\n reaction_type: {\n name: reaction_type_name,\n code: reaction_type_code,\n code_system: reaction_type_code_system,\n code_system_name: reaction_type_code_system_name\n },\n allergen: {\n name: allergen_name,\n code: allergen_code,\n code_system: allergen_code_system,\n code_system_name: allergen_code_system_name\n }\n });\n }); \n return data;\n }\n};\n","/*\n * Parser for the C32 demographics section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) { \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var data = {}, el;\n \n var demographics = c32.section('demographics');\n \n var patient = demographics.tag('patientRole');\n el = patient.tag('patient').tag('name');\n var patient_name_dict = parseName(el);\n \n el = patient.tag('patient');\n var dob = parseDate(el.tag('birthTime').attr('value')),\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\n \n el = patient.tag('addr');\n var patient_address_dict = parseAddress(el);\n \n el = patient.tag('telecom');\n var home = el.attr('value'),\n work = null,\n mobile = null;\n \n var email = null;\n \n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\n race = patient.tag('raceCode').attr('displayName'),\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\n \n el = patient.tag('birthplace');\n var birthplace_dict = parseAddress(el);\n \n el = patient.tag('guardian');\n var guardian_relationship = el.tag('code').attr('displayName'),\n guardian_relationship_code = el.tag('code').attr('code'),\n guardian_home = el.tag('telecom').attr('value');\n \n el = el.tag('guardianPerson').tag('name');\n var guardian_name_dict = parseName(el);\n \n el = patient.tag('guardian').tag('addr');\n var guardian_address_dict = parseAddress(el);\n \n el = patient.tag('providerOrganization');\n var provider_organization = el.tag('name').val(),\n provider_phone = el.tag('telecom').attr('value'),\n provider_address_dict = parseAddress(el.tag('addr'));\n \n data = {\n name: patient_name_dict,\n dob: dob,\n gender: gender,\n marital_status: marital_status,\n address: patient_address_dict,\n phone: {\n home: home,\n work: work,\n mobile: mobile\n },\n email: email,\n language: language,\n race: race,\n ethnicity: ethnicity,\n religion: religion,\n birthplace: {\n state: birthplace_dict.state,\n zip: birthplace_dict.zip,\n country: birthplace_dict.country\n },\n guardian: {\n name: {\n given: guardian_name_dict.given,\n family: guardian_name_dict.family\n },\n relationship: guardian_relationship,\n relationship_code: guardian_relationship_code,\n address: guardian_address_dict,\n phone: {\n home: guardian_home\n }\n },\n provider: {\n organization: provider_organization,\n phone: provider_phone,\n address: provider_address_dict\n }\n };\n \n return data;\n };\n}\n","/*\n * Parser for the C32 document section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var data = {}, el;\n \n var doc = c32.section('document');\n \n // Parse Doc Type Info\n var templates = doc.elsByTag('templateId');\n var rootTemplate = templates[0].attr('root');\n var secondTemplate;\n if(templates.length >1)\n secondTemplate = templates[1].attr('root');\n else\n secondTemplate = rootTemplate;\n \n var loinc = doc.tag('code').attr('code');\n var templateId = doc.tag('templateId').attr('root');\n var displayName = doc.tag('code').attr('displayName');\n \n var nonXml = doc.tag('nonXMLBody');\n var nonXmlNodes = nonXml.el.childNodes;\n \n var bodyType = \"structured\";\n var nonXmlBody = {\n type: \"\",\n mediaType: \"\",\n representation: \"\",\n rawText: \"\",\n reference: \"\"\n };\n \n if(nonXmlNodes && nonXmlNodes.length > 0) {\n bodyType = \"unstructured\";\n var text = nonXml.tag('text');\n var mediaType = \"\";\n var representation = \"\";\n var rawText = \"\";\n var reference = \"\";\n var type = \"\";\n \n // We have an embedded doc\n if(text && text.attr('mediaType')) {\n mediaType = text.attr('mediaType');\n representation = text.attr('representation');\n rawText = text.val();\n type = \"embedded\";\n }\n \n if(text && !mediaType) {\n reference = text.tag('reference').attr('value');\n type = \"reference\";\n }\n nonXmlBody = {\n type: type,\n mediaType: mediaType,\n representation: representation,\n rawText: rawText,\n reference: reference\n }\n }\n \n var docType = {\n type: \"CCDAR2\",\n rootTemplateId: rootTemplate,\n templateId: secondTemplate,\n displayName: displayName,\n loinc: loinc,\n bodyType: bodyType,\n nonXmlBody: nonXmlBody\n };\n \n var date = parseDate(doc.tag('effectiveTime').attr('value'));\n var title = Core.stripWhitespace(doc.tag('title').val());\n \n var author = doc.tag('author');\n el = author.tag('assignedPerson').tag('name');\n var name_dict = parseName(el);\n // Sometimes C32s include names that are just like <name>String</name>\n // and we still want to get something out in that case\n if (!name_dict.prefix && !name_dict.given.length && !name_dict.family) {\n name_dict.family = el.val();\n }\n \n el = author.tag('addr');\n var address_dict = parseAddress(el);\n \n el = author.tag('telecom');\n var work_phone = el.attr('value');\n \n var documentation_of_list = [];\n var performers = doc.tag('documentationOf').elsByTag('performer');\n for (var i = 0; i < performers.length; i++) {\n el = performers[i].tag('assignedPerson').tag('name');\n var performer_name_dict = parseName(el);\n var performer_phone = performers[i].tag('telecom').attr('value');\n var performer_addr = parseAddress(el.tag('addr'));\n documentation_of_list.push({\n name: performer_name_dict,\n phone: {\n work: performer_phone\n },\n address: performer_addr\n });\n }\n \n el = doc.tag('encompassingEncounter');\n var location_name = Core.stripWhitespace(el.tag('name').val());\n var location_addr_dict = parseAddress(el.tag('addr'));\n \n var encounter_date = null;\n el = el.tag('effectiveTime');\n if (!el.isEmpty()) {\n encounter_date = parseDate(el.attr('value'));\n }\n \n data = {\n type: docType,\n date: date,\n title: title,\n author: {\n name: name_dict,\n address: address_dict,\n phone: {\n work: work_phone\n }\n },\n documentation_of: documentation_of_list,\n location: {\n name: location_name,\n address: location_addr_dict,\n encounter_date: encounter_date\n }\n };\n \n return data;\n };\n}","/*\n * Parser for the C32 encounters section\n */\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var encounters = c32.section('encounters');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Encounters\";\n data.templateId = encounters.tag('templateId').attr('root');\n data.text = encounters.tag('text').val(true);\n \n encounters.entries().each(function(entry) {\n \n var date = parseDate(entry.tag('effectiveTime').attr('value'));\n if (!date) {\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\n }\n \n el = entry.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName'),\n code_system_version = el.attr('codeSystemVersion');\n \n // translation\n el = entry.tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n // performer\n el = entry.tag('performer');\n var performer_name = el.tag('name').val(),\n performer_code = el.attr('code'),\n performer_code_system = el.attr('codeSystem'),\n performer_code_system_name = el.attr('codeSystemName');\n \n // participant => location\n el = entry.tag('participant');\n var organization = el.tag('name').val(),\n location_dict = parseAddress(el);\n location_dict.organization = organization;\n \n // findings\n var findings = [];\n var findingEls = entry.elsByTag('entryRelationship');\n for (var i = 0; i < findingEls.length; i++) {\n el = findingEls[i].tag('value');\n findings.push({\n name: el.attr('displayName'),\n code: el.attr('code'),\n code_system: el.attr('codeSystem')\n });\n }\n \n data.entries.push({\n date: date,\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n code_system_version: code_system_version,\n findings: findings,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n performer: {\n name: performer_name,\n code: performer_code,\n code_system: performer_code_system,\n code_system_name: performer_code_system_name\n },\n location: location_dict\n });\n });\n \n return data;\n };\n}\n","/*\n * Parser for the C32 immunizations section\n */\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var administeredData = {}, declinedData = {}, product, el;\n \n var immunizations = c32.section('immunizations');\n \n administeredData.entries = [];\n administeredData.displayName = \"Immunizations\";\n administeredData.templateId = immunizations.tag('templateId').attr('root');\n administeredData.text = immunizations.tag('text').val(true);\n \n declinedData.entries = [];\n declinedData.displayName = \"Immunizations Declined\";\n declinedData.templateId = immunizations.tag('templateId').attr('root');\n declinedData.text = immunizations.tag('text').val(true);\n \n \n \n immunizations.entries().each(function(entry) {\n \n // date\n el = entry.tag('effectiveTime');\n var date = parseDate(el.attr('value'));\n if (!date) {\n date = parseDate(el.tag('low').attr('value'));\n }\n \n // if 'declined' is true, this is a record that this vaccine WASN'T administered\n el = entry.tag('substanceAdministration');\n var declined = el.boolAttr('negationInd');\n \n // product\n product = entry.template('2.16.840.1.113883.10.20.1.53');\n el = product.tag('code');\n var product_name = el.attr('displayName'),\n product_code = el.attr('code'),\n product_code_system = el.attr('codeSystem'),\n product_code_system_name = el.attr('codeSystemName');\n \n // translation\n el = product.tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n // misc product details\n el = product.tag('lotNumberText');\n var lot_number = el.val();\n \n el = product.tag('manufacturerOrganization');\n var manufacturer_name = el.tag('name').val();\n \n // route\n el = entry.tag('routeCode');\n var route_name = el.attr('displayName'),\n route_code = el.attr('code'),\n route_code_system = el.attr('codeSystem'),\n route_code_system_name = el.attr('codeSystemName');\n \n // instructions\n el = entry.template('2.16.840.1.113883.10.20.1.49');\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\n el = el.tag('code');\n var education_name = el.attr('displayName'),\n education_code = el.attr('code'),\n education_code_system = el.attr('codeSystem');\n \n // dose\n el = entry.tag('doseQuantity');\n var dose_value = el.attr('value'),\n dose_unit = el.attr('unit');\n \n var data = (declined) ? declinedData : administeredData;\n data.entries.push({\n date: date,\n product: {\n name: product_name,\n code: product_code,\n code_system: product_code_system,\n code_system_name: product_code_system_name,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n lot_number: lot_number,\n manufacturer_name: manufacturer_name\n },\n dose_quantity: {\n value: dose_value,\n unit: dose_unit\n },\n route: {\n name: route_name,\n code: route_code,\n code_system: route_code_system,\n code_system_name: route_code_system_name\n },\n instructions: instructions_text,\n education_type: {\n name: education_name,\n code: education_code,\n code_system: education_code_system\n }\n });\n });\n \n return {\n administered: administeredData,\n declined: declinedData\n };\n };\n}\n","var Core = require('../../core');\n\n/*\n * Parser for the C32 medications section\n */\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n \n function parse(c32) { \n var parseDate = self.doc.parseDate;\n var medications = c32.section('medications');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Medications\";\n data.templateId = medications.tag('templateId').attr('root');\n data.text = medications.tag('text').val(true);\n \n medications.entries().each(function(entry) {\n \n var text = null;\n el = entry.tag('substanceAdministration').immediateChildTag('text');\n if (!el.isEmpty()) {\n // technically C32s don't use this, but C83s (another CCD) do,\n // and CCDAs do, so we may see it anyways\n text = Core.stripWhitespace(el.val());\n }\n \n var effectiveTimes = entry.elsByTag('effectiveTime');\n \n el = effectiveTimes[0]; // the first effectiveTime is the med start date\n var start_date = null, end_date = null;\n if (el) {\n start_date = parseDate(el.tag('low').attr('value'));\n end_date = parseDate(el.tag('high').attr('value'));\n }\n \n // the second effectiveTime might the schedule period or it might just\n // be a random effectiveTime from further in the entry... xsi:type should tell us\n el = effectiveTimes[1];\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\n var institutionSpecified = el.attr('institutionSpecified');\n if (institutionSpecified === 'true') {\n schedule_type= 'frequency';\n } else if (institutionSpecified === 'false') {\n schedule_type = 'interval';\n }\n \n el = el.tag('period');\n schedule_period_value = el.attr('value');\n schedule_period_unit = el.attr('unit');\n }\n \n el = entry.tag('manufacturedProduct').tag('code');\n var product_name = el.attr('displayName'),\n product_code = el.attr('code'),\n product_code_system = el.attr('codeSystem');\n \n var product_original_text = null;\n el = entry.tag('manufacturedProduct').tag('originalText');\n if (!el.isEmpty()) {\n product_original_text = Core.stripWhitespace(el.val());\n }\n // if we don't have a product name yet, try the originalText version\n if (!product_name && product_original_text) {\n product_name = product_original_text;\n }\n \n // irregularity in some c32s\n if (!product_name) {\n el = entry.tag('manufacturedProduct').tag('name');\n if (!el.isEmpty()) {\n product_name = Core.stripWhitespace(el.val());\n }\n }\n \n el = entry.tag('manufacturedProduct').tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n el = entry.tag('doseQuantity');\n var dose_value = el.attr('value'),\n dose_unit = el.attr('unit');\n \n el = entry.tag('rateQuantity');\n var rate_quantity_value = el.attr('value'),\n rate_quantity_unit = el.attr('unit');\n \n el = entry.tag('precondition').tag('value');\n var precondition_name = el.attr('displayName'),\n precondition_code = el.attr('code'),\n precondition_code_system = el.attr('codeSystem');\n \n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\n var reason_name = el.attr('displayName'),\n reason_code = el.attr('code'),\n reason_code_system = el.attr('codeSystem');\n \n el = entry.tag('routeCode');\n var route_name = el.attr('displayName'),\n route_code = el.attr('code'),\n route_code_system = el.attr('codeSystem'),\n route_code_system_name = el.attr('codeSystemName');\n \n // participant/playingEntity => vehicle\n el = entry.tag('participant').tag('playingEntity');\n var vehicle_name = el.tag('name').val();\n \n el = el.tag('code');\n // prefer the code vehicle_name but fall back to the non-coded one\n // (which for C32s is in fact the primary field for this info)\n vehicle_name = el.attr('displayName') || vehicle_name;\n var vehicle_code = el.attr('code'),\n vehicle_code_system = el.attr('codeSystem'),\n vehicle_code_system_name = el.attr('codeSystemName');\n \n el = entry.tag('administrationUnitCode');\n var administration_name = el.attr('displayName'),\n administration_code = el.attr('code'),\n administration_code_system = el.attr('codeSystem'),\n administration_code_system_name = el.attr('codeSystemName');\n \n // performer => prescriber\n el = entry.tag('performer');\n var prescriber_organization = el.tag('name').val(),\n prescriber_person = null;\n \n data.entries.push({\n date_range: {\n start: start_date,\n end: end_date\n },\n text: text,\n product: {\n name: product_name,\n text: product_original_text,\n code: product_code,\n code_system: product_code_system,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n }\n },\n dose_quantity: {\n value: dose_value,\n unit: dose_unit\n },\n rate_quantity: {\n value: rate_quantity_value,\n unit: rate_quantity_unit\n },\n precondition: {\n name: precondition_name,\n code: precondition_code,\n code_system: precondition_code_system\n },\n reason: {\n name: reason_name,\n code: reason_code,\n code_system: reason_code_system\n },\n route: {\n name: route_name,\n code: route_code,\n code_system: route_code_system,\n code_system_name: route_code_system_name\n },\n schedule: {\n type: schedule_type,\n period_value: schedule_period_value,\n period_unit: schedule_period_unit\n },\n vehicle: {\n name: vehicle_name,\n code: vehicle_code,\n code_system: vehicle_code_system,\n code_system_name: vehicle_code_system_name\n },\n administration: {\n name: administration_name,\n code: administration_code,\n code_system: administration_code_system,\n code_system_name: administration_code_system_name\n },\n prescriber: {\n organization: prescriber_organization,\n person: prescriber_person\n }\n });\n });\n \n return data;\n };\n}\n","var Core = require('../../core');\n\n/*\n * Parser for the C32 problems section\n */\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var problems = c32.section('problems');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Problems\";\n data.templateId = problems.tag('templateId').attr('root');\n data.text = problems.tag('text').val(true);\n \n problems.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var start_date = parseDate(el.tag('low').attr('value')),\n end_date = parseDate(el.tag('high').attr('value'));\n \n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('value');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n // Pre-C32 CCDs put the problem name in this \"originalText\" field, and some vendors\n // continue doing this with their C32, even though it's not technically correct\n if (!name) {\n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('originalText');\n if (!el.isEmpty()) {\n name = Core.stripWhitespace(el.val());\n }\n }\n \n el = entry.template('2.16.840.1.113883.10.20.1.28').tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n el = entry.template('2.16.840.1.113883.10.20.1.50');\n var status = el.tag('value').attr('displayName');\n \n var age = null;\n el = entry.template('2.16.840.1.113883.10.20.1.38');\n if (!el.isEmpty()) {\n age = parseFloat(el.tag('value').attr('value'));\n }\n \n data.entries.push({\n date_range: {\n start: start_date,\n end: end_date\n },\n name: name,\n status: status,\n age: age,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n comment: null // not part of C32\n });\n });\n \n return data;\n };\n}\n","/*\n * Parser for the C32 procedures section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var procedures = c32.section('procedures');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Procedures\";\n data.templateId = procedures.tag('templateId').attr('root');\n data.text = procedures.tag('text').val(true);\n \n procedures.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var date = parseDate(el.attr('value'));\n \n el = entry.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem');\n \n if (!name) {\n name = Core.stripWhitespace(entry.tag('originalText').val());\n }\n \n // 'specimen' tag not always present\n el = entry.tag('specimen').tag('code');\n var specimen_name = el.attr('displayName'),\n specimen_code = el.attr('code'),\n specimen_code_system = el.attr('codeSystem');\n \n el = entry.tag('performer').tag('addr');\n var organization = el.tag('name').val(),\n phone = el.tag('telecom').attr('value');\n \n var performer_dict = parseAddress(el);\n performer_dict.organization = organization;\n performer_dict.phone = phone;\n \n // participant => device\n el = entry.tag('participant').tag('code');\n var device_name = el.attr('displayName'),\n device_code = el.attr('code'),\n device_code_system = el.attr('codeSystem');\n \n data.entries.push({\n date: date,\n name: name,\n code: code,\n code_system: code_system,\n specimen: {\n name: specimen_name,\n code: specimen_code,\n code_system: specimen_code_system\n },\n performer: performer_dict,\n device: {\n name: device_name,\n code: device_code,\n code_system: device_code_system\n }\n });\n });\n \n return data;\n };\n}","/*\n * Parser for the C32 results (labs) section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var results = c32.section('results');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Results\";\n data.templateId = results.tag('templateId').attr('root');\n data.text = results.tag('text').val(true);\n \n \n results.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var panel_date = parseDate(entry.tag('effectiveTime').attr('value'));\n if (!panel_date) {\n panel_date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\n }\n \n // panel\n el = entry.tag('code');\n var panel_name = el.attr('displayName'),\n panel_code = el.attr('code'),\n panel_code_system = el.attr('codeSystem'),\n panel_code_system_name = el.attr('codeSystemName');\n \n var observation;\n var tests = entry.elsByTag('observation');\n var tests_data = [];\n \n for (var i = 0; i < tests.length; i++) {\n observation = tests[i];\n \n // sometimes results organizers contain non-results. we only want tests\n if (observation.template('2.16.840.1.113883.10.20.1.31').val()) {\n var date = parseDate(observation.tag('effectiveTime').attr('value'));\n \n el = observation.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n if (!name) {\n name = Core.stripWhitespace(observation.tag('text').val());\n }\n \n el = observation.tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n el = observation.tag('value');\n var value = el.attr('value'),\n unit = el.attr('unit');\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\n // not to trust that that field has been used correctly...\n if (value && !isNaN(parseFloat(value))) {\n value = parseFloat(value);\n }\n if (!value) {\n value = el.val(); // look for free-text values\n }\n \n el = observation.tag('referenceRange');\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\n \n tests_data.push({\n date: date,\n name: name,\n value: value,\n unit: unit,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n reference_range: {\n text: reference_range_text,\n low_unit: reference_range_low_unit,\n low_value: reference_range_low_value,\n high_unit: reference_range_high_unit,\n high_value: reference_range_high_value,\n }\n });\n }\n }\n \n data.entries.push({\n name: panel_name,\n code: panel_code,\n code_system: panel_code_system,\n code_system_name: panel_code_system_name,\n date: panel_date,\n tests: tests_data\n });\n });\n \n return data;\n }; \n}","/*\n * Parser for the C32 vitals section\n */\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.parse = parse;\n\n function parse(c32) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var vitals = c32.section('vitals');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Vitals\";\n data.templateId = vitals.tag('templateId').attr('root');\n data.text = vitals.tag('text').val(true);\n \n vitals.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var entry_date = parseDate(el.attr('value'));\n \n var result;\n var results = entry.elsByTag('component');\n var results_data = [];\n \n for (var j = 0; j < results.length; j++) {\n result = results[j];\n \n // Results\n \n el = result.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n el = result.tag('value');\n var value = parseFloat(el.attr('value')),\n unit = el.attr('unit');\n \n results_data.push({\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n value: value,\n unit: unit\n });\n }\n \n data.entries.push({\n date: entry_date,\n results: results_data\n });\n });\n \n return data;\n };\n}","/*\n * Parser for the CCDAR2 document\n */\n\nvar ParseGenericInfo = require('./generic');\nvar Core = require('../core');\nvar DocumentParser = require('./ccd/document');\nvar DemographicsParser = require('./ccda/demographics');\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.documentParser = new DocumentParser(self.doc);\n self.demographicsParser = new DemographicsParser(self.doc);\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\n \n self.run = function (ccda) {\n var data = {};\n\n data.document = self.documentParser.document(ccda);\n data.demographics = self.demographicsParser.demographics(ccda);\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\n data.json = Core.json;\n\n // Decorate each section with Title, templateId and text and adds missing sections\n ParseGenericInfo(ccda, data);\n\n return data;\n };\n}\n","/*\n * Parser for the CCDAR2 document section\n */\nvar Core = require('../../core');\n\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.document = document;\n\n function document(ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var data = {}, el;\n \n var doc = ccda.section('document');\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\n var title = Core.stripWhitespace(doc.tag('title').val());\n \n // Parse Doc Type Info\n var templates = doc.elsByTag('templateId');\n \n var rootTemplate = templates[0].attr('root');\n var secondTemplate;\n if(templates.length >1)\n secondTemplate = templates[1].attr('root');\n else\n secondTemplate = rootTemplate;\n \n var loinc = doc.tag('code').attr('code');\n var templateId = doc.tag('templateId').attr('root');\n var displayName = doc.tag('code').attr('displayName');\n \n var nonXml = doc.tag('nonXMLBody');\n var nonXmlNodes = nonXml.el.childNodes;\n \n var bodyType = \"structured\";\n var nonXmlBody = {\n type: \"\",\n mediaType: \"\",\n representation: \"\",\n rawText: \"\",\n reference: \"\"\n };\n if(nonXmlNodes && nonXmlNodes.length > 0) {\n bodyType = \"unstructured\";\n var text = nonXml.tag('text');\n var mediaType = \"\";\n var representation = \"\";\n var rawText = \"\";\n var reference = \"\";\n var type = \"\";\n \n // We have an embedded doc\n if(text && text.attr('mediaType')) {\n mediaType = text.attr('mediaType');\n representation = text.attr('representation');\n rawText = text.val();\n type = \"embedded\";\n }\n \n if(text && !mediaType) {\n reference = text.tag('reference').attr('value');\n type = \"reference\";\n }\n nonXmlBody = {\n type: type,\n mediaType: mediaType,\n representation: representation,\n rawText: rawText,\n reference: reference\n }\n }\n \n var docType = {\n type: \"CCDAR2\",\n rootTemplateId: rootTemplate,\n templateId: secondTemplate,\n displayName: displayName,\n loinc: loinc,\n bodyType: bodyType,\n nonXmlBody: nonXmlBody\n };\n \n var author = doc.tag('author');\n el = author.tag('assignedPerson').tag('name');\n var name_dict = parseName(el);\n \n el = author.tag('addr');\n var address_dict = parseAddress(el);\n \n el = author.tag('telecom');\n var work_phone = el.attr('value');\n \n var documentation_of_list = [];\n var performers = doc.tag('documentationOf').elsByTag('performer');\n for (var i = 0; i < performers.length; i++) {\n el = performers[i];\n var performer_name_dict = parseName(el);\n var performer_phone = el.tag('telecom').attr('value');\n var performer_addr = parseAddress(el.tag('addr'));\n documentation_of_list.push({\n name: performer_name_dict,\n phone: {\n work: performer_phone\n },\n address: performer_addr\n });\n }\n \n el = doc.tag('encompassingEncounter').tag('location');\n var location_name = Core.stripWhitespace(el.tag('name').val());\n var location_addr_dict = parseAddress(el.tag('addr'));\n \n var encounter_date = null;\n el = el.tag('effectiveTime');\n if (!el.isEmpty()) {\n encounter_date = parseDate(el.attr('value'));\n }\n \n data = {\n type: docType,\n date: date,\n title: title,\n author: {\n name: name_dict,\n address: address_dict,\n phone: {\n work: work_phone\n }\n },\n documentation_of: documentation_of_list,\n location: {\n name: location_name,\n address: location_addr_dict,\n encounter_date: encounter_date\n }\n };\n \n return data;\n };\n}","var Core = require('../core');\nvar AllergiesParser = require('./ccda/allergies');\nvar CarePlanParser = require('./ccda/care_plan');\nvar DemographicsParser = require('./ccda/demographics');\nvar DocumentParser = require('./ccda/document');\nvar EncountersParser = require('./ccda/encounters');\nvar FreeTextParser = require('./ccda/free_text');\nvar FunctionalStatusesParser = require('./ccda/functional_statuses');\nvar ImmunizationsParser = require('./ccda/immunizations');\nvar InstructionsParser = require('./ccda/instructions');\nvar MedicationsParser = require('./ccda/medications');\nvar ProblemsParser = require('./ccda/problems');\nvar ProceduresParser = require('./ccda/procedures');\nvar ResultsParser = require('./ccda/results');\nvar SmokingStatusParser = require('./ccda/smoking_status');\nvar VitalsParser = require('./ccda/vitals');\n\nvar ParseGenericInfo = require('./generic');\n\n/*\n * Parser for the CCDA document\n */\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.allergiesParser = new AllergiesParser(self.doc);\n self.carePlanParser = new CarePlanParser(self.doc);\n self.demographicsParser = new DemographicsParser(self.doc);\n self.documentParser = new DocumentParser(self.doc);\n self.encountersParser = new EncountersParser(self.doc);\n self.freeTextParser = new FreeTextParser();\n self.functionalStatusesParser = new FunctionalStatusesParser(self.doc);\n self.immunizationsParser = new ImmunizationsParser(self.doc);\n self.instructionsParser = new InstructionsParser();\n self.medicationsParser = new MedicationsParser(self.doc);\n self.problemsParser = new ProblemsParser(self.doc);\n self.proceduresParser = new ProceduresParser(self.doc);\n self.resultsParser = new ResultsParser(self.doc);\n self.smokingStatusParser = new SmokingStatusParser(self.doc);\n self.vitalsParser = new VitalsParser(self.doc);\n\n\n self.run = function (ccda) {\n var data = {};\n \n data.document = self.documentParser.document(ccda);\n data.allergies = self.allergiesParser.allergies(ccda);\n data.care_plan = self.carePlanParser.care_plan(ccda);\n data.chief_complaint = self.freeTextParser.free_text(ccda, 'chief_complaint');\n data.demographics = self.demographicsParser.demographics(ccda);\n data.encounters = self.encountersParser.encounters(ccda);\n data.functional_statuses = self.functionalStatusesParser.functional_statuses(ccda);\n var parsedImmunizations = self.immunizationsParser.immunizations(ccda);\n data.immunizations = parsedImmunizations.administered;\n data.immunization_declines = parsedImmunizations.declined;\n data.instructions = self.instructionsParser.instructions(ccda);\n data.results = self.resultsParser.results(ccda);\n data.medications = self.medicationsParser.medications(ccda);\n data.problems = self.problemsParser.problems(ccda);\n data.procedures = self.proceduresParser.procedures(ccda);\n data.smoking_status = self.smokingStatusParser.smoking_status(ccda);\n data.vitals = self.vitalsParser.vitals(ccda);\n \n data.json = Core.json;\n data.document.json = Core.json;\n data.allergies.json = Core.json;\n data.care_plan.json = Core.json;\n data.chief_complaint.json = Core.json;\n data.demographics.json = Core.json;\n data.encounters.json = Core.json;\n data.functional_statuses.json = Core.json;\n data.immunizations.json = Core.json;\n data.immunization_declines.json = Core.json;\n data.instructions.json = Core.json;\n data.results.json = Core.json;\n data.medications.json = Core.json;\n data.problems.json = Core.json;\n data.procedures.json = Core.json;\n data.smoking_status.json = Core.json;\n data.vitals.json = Core.json;\n\n // Decorate each section with Title, templateId and text and adds missing sections\n ParseGenericInfo(ccda, data);\n\n return data;\n };\n}\n","/*\n * Parser for the CCDA allergies section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n \n self.allergies = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var allergies = ccda.section('allergies');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Allergies\";\n data.templateId = allergies.tag('templateId').attr('root');\n data.text = allergies.tag('text').val(true);\n \n allergies.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var start_date = parseDate(el.tag('low').attr('value')),\n end_date = parseDate(el.tag('high').attr('value'));\n \n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n // value => reaction_type\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('value');\n var reaction_type_name = el.attr('displayName'),\n reaction_type_code = el.attr('code'),\n reaction_type_code_system = el.attr('codeSystem'),\n reaction_type_code_system_name = el.attr('codeSystemName');\n \n // reaction\n el = entry.template('2.16.840.1.113883.10.20.22.4.9').tag('value');\n var reaction_name = el.attr('displayName'),\n reaction_code = el.attr('code'),\n reaction_code_system = el.attr('codeSystem');\n \n // severity\n el = entry.template('2.16.840.1.113883.10.20.22.4.8').tag('value');\n var severity = el.attr('displayName');\n \n // participant => allergen\n el = entry.tag('participant').tag('code');\n var allergen_name = el.attr('displayName'),\n allergen_code = el.attr('code'),\n allergen_code_system = el.attr('codeSystem'),\n allergen_code_system_name = el.attr('codeSystemName');\n \n // this is not a valid place to store the allergen name but some vendors use it\n if (!allergen_name) {\n el = entry.tag('participant').tag('name');\n if (!el.isEmpty()) {\n allergen_name = el.val();\n }\n }\n if (!allergen_name) {\n el = entry.template('2.16.840.1.113883.10.20.22.4.7').tag('originalText');\n if (!el.isEmpty()) {\n allergen_name = Core.stripWhitespace(el.val());\n }\n }\n \n // status\n el = entry.template('2.16.840.1.113883.10.20.22.4.28').tag('value');\n var status = el.attr('displayName');\n \n data.entries.push({\n date_range: {\n start: start_date,\n end: end_date\n },\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n status: status,\n severity: severity,\n reaction: {\n name: reaction_name,\n code: reaction_code,\n code_system: reaction_code_system\n },\n reaction_type: {\n name: reaction_type_name,\n code: reaction_type_code,\n code_system: reaction_type_code_system,\n code_system_name: reaction_type_code_system_name\n },\n allergen: {\n name: allergen_name,\n code: allergen_code,\n code_system: allergen_code_system,\n code_system_name: allergen_code_system_name\n }\n });\n });\n \n return data;\n };\n}","/*\n * Parser for the CCDA \"plan of care\" section\n */\n\n'use strict'\nlet Core = require('../../core');\n\nmodule.exports = function(doc) {\n let self = this;\n self.doc = doc;\n\n self.care_plan = function (ccda) {\n let care_plan = ccda.section('care_plan');\n \n let data = {}, el;\n data.entries = [];\n data.displayName = \"Care Plan\";\n data.templateId = care_plan.tag('templateId').attr('root');\n data.text = care_plan.tag('text').val(true);\n \n care_plan.entries().each(function (entry) {\n \n let name = null,\n code = null,\n code_system = null,\n code_system_name = null;\n \n // Plan of care encounters, which have no other details\n el = entry.template('2.16.840.1.113883.10.20.22.4.40');\n if (!el.isEmpty()) {\n name = 'encounter';\n } else {\n el = entry.tag('code');\n \n name = el.attr('displayName');\n code = el.attr('code');\n code_system = el.attr('codeSystem');\n code_system_name = el.attr('codeSystemName');\n }\n \n let text = Core.stripWhitespace(entry.tag('text').val(true));\n let time = entry.tag('effectiveTime').immediateChildTag('center').attr('value');\n \n data.entries.push({\n text: text,\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n effective_time: parse(time)\n });\n });\n \n return data;\n \n function parse(str) {\n if (!str) return null;\n let y = str.substr(0, 4),\n m = str.substr(4, 2) - 1,\n d = str.substr(6, 2);\n let D = new Date(y, m, d);\n return (D.getFullYear() == y && D.getMonth() == m && D.getDate() == d) ? D : null;\n }\n };\n}\n","/*\n * Parser for the CCDA demographics section\n */\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.demographics = demographics;\n\n function demographics(ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var data = {}, el;\n \n var demographics = ccda.section('demographics');\n \n var patient = demographics.tag('patientRole');\n el = patient.tag('patient').tag('name');\n var patient_name_dict = parseName(el);\n \n el = patient.tag('patient');\n var dob = parseDate(el.tag('birthTime').attr('value')),\n gender = Core.Codes.gender(el.tag('administrativeGenderCode').attr('code')),\n marital_status = Core.Codes.maritalStatus(el.tag('maritalStatusCode').attr('code'));\n \n el = patient.tag('addr');\n var patient_address_dict = parseAddress(el);\n \n el = patient.tag('telecom');\n var home = el.attr('value'),\n work = null,\n mobile = null;\n \n var email = null;\n \n var language = patient.tag('languageCommunication').tag('languageCode').attr('code'),\n race = patient.tag('raceCode').attr('displayName'),\n ethnicity = patient.tag('ethnicGroupCode').attr('displayName'),\n religion = patient.tag('religiousAffiliationCode').attr('displayName');\n \n el = patient.tag('birthplace');\n var birthplace_dict = parseAddress(el);\n \n el = patient.tag('guardian');\n var guardian_relationship = el.tag('code').attr('displayName'),\n guardian_relationship_code = el.tag('code').attr('code'),\n guardian_home = el.tag('telecom').attr('value');\n \n el = el.tag('guardianPerson').tag('name');\n var guardian_name_dict = parseName(el);\n \n el = patient.tag('guardian').tag('addr');\n var guardian_address_dict = parseAddress(el);\n \n el = patient.tag('providerOrganization');\n var provider_organization = el.tag('name').val(),\n provider_phone = el.tag('telecom').attr('value');\n \n var provider_address_dict = parseAddress(el.tag('addr'));\n \n data = {\n name: patient_name_dict,\n dob: dob,\n gender: gender,\n marital_status: marital_status,\n address: patient_address_dict,\n phone: {\n home: home,\n work: work,\n mobile: mobile\n },\n email: email,\n language: language,\n race: race,\n ethnicity: ethnicity,\n religion: religion,\n birthplace: {\n state: birthplace_dict.state,\n zip: birthplace_dict.zip,\n country: birthplace_dict.country\n },\n guardian: {\n name: {\n given: guardian_name_dict.given,\n family: guardian_name_dict.family\n },\n relationship: guardian_relationship,\n relationship_code: guardian_relationship_code,\n address: guardian_address_dict,\n phone: {\n home: guardian_home\n }\n },\n provider: {\n organization: provider_organization,\n phone: provider_phone,\n address: provider_address_dict\n }\n };\n \n return data;\n };\n}","/*\n * Parser for the CCDA document section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.document = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var data = {}, el;\n \n var doc = ccda.section('document');\n \n \n // Parse Doc Type Info\n var templates = doc.elsByTag('templateId');\n var rootTemplate = templates[0].attr('root');\n var secondTemplate;\n if(templates.length >1)\n secondTemplate = templates[1].attr('root');\n else\n secondTemplate = rootTemplate;\n \n var loinc = doc.tag('code').attr('code');\n var templateId = doc.tag('templateId').attr('root');\n var displayName = doc.tag('code').attr('displayName');\n \n var nonXml = doc.tag('nonXMLBody');\n var nonXmlNodes = nonXml.el.childNodes;\n \n var bodyType = \"structured\";\n var nonXmlBody = {\n type: \"\",\n mediaType: \"\",\n representation: \"\",\n rawText: \"\",\n reference: \"\"\n };\n if(nonXmlNodes && nonXmlNodes.length > 0) {\n bodyType = \"unstructured\";\n var text = nonXml.tag('text');\n var mediaType = \"\";\n var representation = \"\";\n var rawText = \"\";\n var reference = \"\";\n var type = \"\";\n \n // We have an embedded doc\n if(text && text.attr('mediaType')) {\n mediaType = text.attr('mediaType');\n representation = text.attr('representation');\n rawText = text.val();\n type = \"embedded\";\n }\n \n if(text && !mediaType) {\n reference = text.tag('reference').attr('value');\n type = \"reference\";\n }\n nonXmlBody = {\n type: type,\n mediaType: mediaType,\n representation: representation,\n rawText: rawText,\n reference: reference\n }\n }\n \n var docType = {\n type: \"CCDAR2\",\n rootTemplateId: rootTemplate,\n templateId: secondTemplate,\n displayName: displayName,\n loinc: loinc,\n bodyType: bodyType,\n nonXmlBody: nonXmlBody\n };\n \n var date = parseDate(doc.tag('effectiveTime').attr('value'));\n var title = Core.stripWhitespace(doc.tag('title').val());\n \n var author = doc.tag('author');\n el = author.tag('assignedPerson').tag('name');\n var name_dict = parseName(el);\n \n el = author.tag('addr');\n var address_dict = parseAddress(el);\n \n el = author.tag('telecom');\n var work_phone = el.attr('value');\n \n var documentation_of_list = [];\n var performers = doc.tag('documentationOf').elsByTag('performer');\n for (var i = 0; i < performers.length; i++) {\n el = performers[i];\n var performer_name_dict = parseName(el);\n var performer_phone = el.tag('telecom').attr('value');\n var performer_addr = parseAddress(el.tag('addr'));\n documentation_of_list.push({\n name: performer_name_dict,\n phone: {\n work: performer_phone\n },\n address: performer_addr\n });\n }\n \n el = doc.tag('encompassingEncounter').tag('location');\n var location_name = Core.stripWhitespace(el.tag('name').val());\n var location_addr_dict = parseAddress(el.tag('addr'));\n \n var encounter_date = null;\n el = el.tag('effectiveTime');\n if (!el.isEmpty()) {\n encounter_date = parseDate(el.attr('value'));\n }\n \n data = {\n type: docType,\n date: date,\n title: title,\n author: {\n name: name_dict,\n address: address_dict,\n phone: {\n work: work_phone\n }\n },\n documentation_of: documentation_of_list,\n location: {\n name: location_name,\n address: location_addr_dict,\n encounter_date: encounter_date\n }\n };\n \n return data;\n };\n}","/*\n * Parser for the CCDA encounters section\n */\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.encounters = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var encounters = ccda.section('encounters');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Encounters\";\n data.templateId = encounters.tag('templateId').attr('root');\n data.text = encounters.tag('text').val(true);\n \n encounters.entries().each(function(entry) {\n \n var date = parseDate(entry.tag('effectiveTime').attr('value'));\n \n el = entry.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName'),\n code_system_version = el.attr('codeSystemVersion');\n \n // translation\n el = entry.tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n // performer\n el = entry.tag('performer').tag('code');\n var performer_name = el.attr('displayName'),\n performer_code = el.attr('code'),\n performer_code_system = el.attr('codeSystem'),\n performer_code_system_name = el.attr('codeSystemName');\n \n // participant => location\n el = entry.tag('participant');\n var organization = el.tag('code').attr('displayName');\n \n var location_dict = parseAddress(el);\n location_dict.organization = organization;\n \n // findings\n var findings = [];\n var findingEls = entry.elsByTag('entryRelationship');\n for (var i = 0; i < findingEls.length; i++) {\n el = findingEls[i].tag('value');\n findings.push({\n name: el.attr('displayName'),\n code: el.attr('code'),\n code_system: el.attr('codeSystem')\n });\n }\n \n data.entries.push({\n date: date,\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n code_system_version: code_system_version,\n findings: findings,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n performer: {\n name: performer_name,\n code: performer_code,\n code_system: performer_code_system,\n code_system_name: performer_code_system_name\n },\n location: location_dict\n });\n });\n \n return data;\n };\n}","/*\n * Parser for any freetext section (i.e., contains just a single <text> element)\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function() {\n var self = this;\n\n self.free_text = function (ccda, sectionName) { \n var data = {};\n \n var doc = ccda.section(sectionName);\n var text = Core.stripWhitespace(doc.tag('text').val(true));\n \n data = {\n text: text\n };\n\n return data;\n };\n}\n","/*\n * Parser for the CCDA functional & cognitive status\n */\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.functional_statuses = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var data = [], el;\n \n var statuses = ccda.section('functional_statuses');\n \n statuses.entries().each(function(entry) {\n \n var date = parseDate(entry.tag('effectiveTime').attr('value'));\n if (!date) {\n date = parseDate(entry.tag('effectiveTime').tag('low').attr('value'));\n }\n \n el = entry.tag('value');\n \n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n data.push({\n date: date,\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name\n });\n \n });\n \n return data;\n }; \n}","/*\n * Parser for the CCDA immunizations section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.immunizations = function (ccda) { \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var administeredData = {}, declinedData = {}, product, el;\n \n var immunizations = ccda.section('immunizations');\n \n administeredData.entries = [];\n administeredData.displayName = \"Immunizations\";\n administeredData.templateId = immunizations.tag('templateId').attr('root');\n administeredData.text = immunizations.tag('text').val(true);\n \n declinedData.entries = [];\n declinedData.displayName = \"Immunizations Declined\";\n declinedData.templateId = immunizations.tag('templateId').attr('root');\n declinedData.text = immunizations.tag('text').val(true);\n \n immunizations.entries().each(function(entry) {\n \n // date\n el = entry.tag('effectiveTime');\n var date = parseDate(el.attr('value'));\n if (!date) {\n date = parseDate(el.tag('low').attr('value'));\n }\n \n // if 'declined' is true, this is a record that this vaccine WASN'T administered\n el = entry.tag('substanceAdministration');\n var declined = el.boolAttr('negationInd');\n \n // product\n product = entry.template('2.16.840.1.113883.10.20.22.4.54');\n el = product.tag('code');\n var product_name = el.attr('displayName'),\n product_code = el.attr('code'),\n product_code_system = el.attr('codeSystem'),\n product_code_system_name = el.attr('codeSystemName');\n \n // translation\n el = product.tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n // misc product details\n el = product.tag('lotNumberText');\n var lot_number = el.val();\n \n el = product.tag('manufacturerOrganization');\n var manufacturer_name = el.tag('name').val();\n \n // route\n el = entry.tag('routeCode');\n var route_name = el.attr('displayName'),\n route_code = el.attr('code'),\n route_code_system = el.attr('codeSystem'),\n route_code_system_name = el.attr('codeSystemName');\n \n // instructions\n el = entry.template('2.16.840.1.113883.10.20.22.4.20');\n var instructions_text = Core.stripWhitespace(el.tag('text').val());\n el = el.tag('code');\n var education_name = el.attr('displayName'),\n education_code = el.attr('code'),\n education_code_system = el.attr('codeSystem');\n \n // dose\n el = entry.tag('doseQuantity');\n var dose_value = el.attr('value'),\n dose_unit = el.attr('unit');\n \n var data = (declined) ? declinedData : administeredData;\n data.entries.push({\n date: date,\n product: {\n name: product_name,\n code: product_code,\n code_system: product_code_system,\n code_system_name: product_code_system_name,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n lot_number: lot_number,\n manufacturer_name: manufacturer_name\n },\n dose_quantity: {\n value: dose_value,\n unit: dose_unit\n },\n route: {\n name: route_name,\n code: route_code,\n code_system: route_code_system,\n code_system_name: route_code_system_name\n },\n instructions: instructions_text,\n education_type: {\n name: education_name,\n code: education_code,\n code_system: education_code_system\n }\n });\n });\n \n return {\n administered: administeredData,\n declined: declinedData\n };\n };\n}\n\n\n","/*\n * Parser for the CCDA \"plan of care\" section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function() {\n var self = this;\n \n self.instructions = function (ccda) {\n \n var data = [], el;\n \n var instructions = ccda.section('instructions');\n data.templateId = instructions.tag('templateId').attr('root');\n \n instructions.entries().each(function(entry) {\n \n el = entry.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n var text = Core.stripWhitespace(entry.tag('text').val(true));\n \n data.push({\n text: text,\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name\n });\n });\n \n return data;\n };\n}","/*\n * Parser for the CCDA medications section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function (doc) {\n var self = this;\n self.doc = doc;\n\n self.medications = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var medications = ccda.section('medications');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Medications\";\n data.templateId = medications.tag('templateId').attr('root');\n data.text = medications.tag('text').val(true);\n \n medications.entries().each(function(entry) {\n \n el = entry.tag('text');\n var sig = Core.stripWhitespace(el.val());\n \n var effectiveTimes = entry.elsByTag('effectiveTime');\n \n el = effectiveTimes[0]; // the first effectiveTime is the med start date\n var start_date = null, end_date = null;\n if (el) {\n start_date = parseDate(el.tag('low').attr('value'));\n end_date = parseDate(el.tag('high').attr('value'));\n }\n \n // the second effectiveTime might the schedule period or it might just\n // be a random effectiveTime from further in the entry... xsi:type should tell us\n el = effectiveTimes[1];\n var schedule_type = null, schedule_period_value = null, schedule_period_unit = null;\n if (el && el.attr('xsi:type') === 'PIVL_TS') {\n var institutionSpecified = el.attr('institutionSpecified');\n if (institutionSpecified === 'true') {\n schedule_type= 'frequency';\n } else if (institutionSpecified === 'false') {\n schedule_type = 'interval';\n }\n \n el = el.tag('period');\n schedule_period_value = el.attr('value');\n schedule_period_unit = el.attr('unit');\n }\n \n el = entry.tag('manufacturedProduct').tag('code');\n var product_name = el.attr('displayName'),\n product_code = el.attr('code'),\n product_code_system = el.attr('codeSystem');\n \n var product_original_text = null;\n el = entry.tag('manufacturedProduct').tag('originalText');\n if (!el.isEmpty()) {\n product_original_text = Core.stripWhitespace(el.val());\n }\n // if we don't have a product name yet, try the originalText version\n if (!product_name && product_original_text) {\n product_name = product_original_text;\n }\n \n el = entry.tag('manufacturedProduct').tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n el = entry.tag('doseQuantity');\n var dose_value = el.attr('value'),\n dose_unit = el.attr('unit');\n \n el = entry.tag('rateQuantity');\n var rate_quantity_value = el.attr('value'),\n rate_quantity_unit = el.attr('unit');\n \n el = entry.tag('precondition').tag('value');\n var precondition_name = el.attr('displayName'),\n precondition_code = el.attr('code'),\n precondition_code_system = el.attr('codeSystem');\n \n el = entry.template('2.16.840.1.113883.10.20.22.4.19').tag('value');\n var reason_name = el.attr('displayName'),\n reason_code = el.attr('code'),\n reason_code_system = el.attr('codeSystem');\n \n el = entry.tag('routeCode');\n var route_name = el.attr('displayName'),\n route_code = el.attr('code'),\n route_code_system = el.attr('codeSystem'),\n route_code_system_name = el.attr('codeSystemName');\n \n // participant/playingEntity => vehicle\n el = entry.tag('participant').tag('playingEntity');\n var vehicle_name = el.tag('name').val();\n \n el = el.tag('code');\n // prefer the code vehicle_name but fall back to the non-coded one\n vehicle_name = el.attr('displayName') || vehicle_name;\n var vehicle_code = el.attr('code'),\n vehicle_code_system = el.attr('codeSystem'),\n vehicle_code_system_name = el.attr('codeSystemName');\n \n el = entry.tag('administrationUnitCode');\n var administration_name = el.attr('displayName'),\n administration_code = el.attr('code'),\n administration_code_system = el.attr('codeSystem'),\n administration_code_system_name = el.attr('codeSystemName');\n \n // performer => prescriber\n el = entry.tag('performer');\n var prescriber_organization = el.tag('name').val(),\n prescriber_person = null;\n \n data.entries.push({\n date_range: {\n start: start_date,\n end: end_date\n },\n text: sig,\n product: {\n name: product_name,\n code: product_code,\n code_system: product_code_system,\n text: product_original_text,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n }\n },\n dose_quantity: {\n value: dose_value,\n unit: dose_unit\n },\n rate_quantity: {\n value: rate_quantity_value,\n unit: rate_quantity_unit\n },\n precondition: {\n name: precondition_name,\n code: precondition_code,\n code_system: precondition_code_system\n },\n reason: {\n name: reason_name,\n code: reason_code,\n code_system: reason_code_system\n },\n route: {\n name: route_name,\n code: route_code,\n code_system: route_code_system,\n code_system_name: route_code_system_name\n },\n schedule: {\n type: schedule_type,\n period_value: schedule_period_value,\n period_unit: schedule_period_unit\n },\n vehicle: {\n name: vehicle_name,\n code: vehicle_code,\n code_system: vehicle_code_system,\n code_system_name: vehicle_code_system_name\n },\n administration: {\n name: administration_name,\n code: administration_code,\n code_system: administration_code_system,\n code_system_name: administration_code_system_name\n },\n prescriber: {\n organization: prescriber_organization,\n person: prescriber_person\n }\n });\n });\n \n return data;\n };\n}\n","/*\n * Parser for the CCDA problems section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.problems = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n \n var problems = ccda.section('problems');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Problems\";\n data.templateId = problems.tag('templateId').attr('root');\n data.text = problems.tag('text').val(true);\n \n problems.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var start_date = parseDate(el.tag('low').attr('value')),\n end_date = parseDate(el.tag('high').attr('value'));\n \n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('value');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n el = entry.template('2.16.840.1.113883.10.20.22.4.4').tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n el = entry.template('2.16.840.1.113883.10.20.22.4.6');\n var status = el.tag('value').attr('displayName');\n \n var age = null;\n el = entry.template('2.16.840.1.113883.10.20.22.4.31');\n if (!el.isEmpty()) {\n age = parseFloat(el.tag('value').attr('value'));\n }\n \n el = entry.template('2.16.840.1.113883.10.20.22.4.64');\n var comment = Core.stripWhitespace(el.tag('text').val());\n \n data.entries.push({\n date_range: {\n start: start_date,\n end: end_date\n },\n name: name,\n status: status,\n age: age,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n comment: comment\n });\n });\n \n return data;\n };\n}\n","/*\n * Parser for the CCDA procedures section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.procedures = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var procedures = ccda.section('procedures');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Procedures\";\n data.templateId = procedures.tag('templateId').attr('root');\n data.text = procedures.tag('text').val(true);\n \n procedures.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var date = parseDate(el.attr('value'));\n \n el = entry.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem');\n \n if (!name) {\n name = Core.stripWhitespace(entry.tag('originalText').val());\n }\n \n // 'specimen' tag not always present\n el = entry.tag('specimen').tag('code');\n var specimen_name = el.attr('displayName'),\n specimen_code = el.attr('code'),\n specimen_code_system = el.attr('codeSystem');\n \n el = entry.tag('performer').tag('addr');\n var organization = el.tag('name').val(),\n phone = el.tag('telecom').attr('value');\n \n var performer_dict = parseAddress(el);\n performer_dict.organization = organization;\n performer_dict.phone = phone;\n \n // participant => device\n el = entry.template('2.16.840.1.113883.10.20.22.4.37').tag('code');\n var device_name = el.attr('displayName'),\n device_code = el.attr('code'),\n device_code_system = el.attr('codeSystem');\n \n data.entries.push({\n date: date,\n name: name,\n code: code,\n code_system: code_system,\n specimen: {\n name: specimen_name,\n code: specimen_code,\n code_system: specimen_code_system\n },\n performer: performer_dict,\n device: {\n name: device_name,\n code: device_code,\n code_system: device_code_system\n }\n });\n });\n \n return data;\n };\n}","/*\n * Parser for the CCDA results (labs) section\n */\n\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.results = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var results = ccda.section('results');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Results\";\n data.templateId = results.tag('templateId').attr('root');\n data.text = results.tag('text').val(true);\n \n results.entries().each(function(entry) {\n \n // panel\n el = entry.tag('code');\n var panel_name = el.attr('displayName'),\n panel_code = el.attr('code'),\n panel_code_system = el.attr('codeSystem'),\n panel_code_system_name = el.attr('codeSystemName');\n \n var observation;\n var tests = entry.elsByTag('observation');\n var tests_data = [];\n \n for (var i = 0; i < tests.length; i++) {\n observation = tests[i];\n \n var date = parseDate(observation.tag('effectiveTime').attr('value'));\n \n el = observation.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n if (!name) {\n name = Core.stripWhitespace(observation.tag('text').val());\n }\n \n el = observation.tag('translation');\n var translation_name = el.attr('displayName'),\n translation_code = el.attr('code'),\n translation_code_system = el.attr('codeSystem'),\n translation_code_system_name = el.attr('codeSystemName');\n \n el = observation.tag('value');\n var value = el.attr('value'),\n unit = el.attr('unit');\n // We could look for xsi:type=\"PQ\" (physical quantity) but it seems better\n // not to trust that that field has been used correctly...\n if (value && !isNaN(parseFloat(value))) {\n value = parseFloat(value);\n }\n if (!value) {\n value = el.val(); // look for free-text values\n }\n \n el = observation.tag('referenceRange');\n var reference_range_text = Core.stripWhitespace(el.tag('observationRange').tag('text').val()),\n reference_range_low_unit = el.tag('observationRange').tag('low').attr('unit'),\n reference_range_low_value = el.tag('observationRange').tag('low').attr('value'),\n reference_range_high_unit = el.tag('observationRange').tag('high').attr('unit'),\n reference_range_high_value = el.tag('observationRange').tag('high').attr('value');\n \n tests_data.push({\n date: date,\n name: name,\n value: value,\n unit: unit,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n translation: {\n name: translation_name,\n code: translation_code,\n code_system: translation_code_system,\n code_system_name: translation_code_system_name\n },\n reference_range: {\n text: reference_range_text,\n low_unit: reference_range_low_unit,\n low_value: reference_range_low_value,\n high_unit: reference_range_high_unit,\n high_value: reference_range_high_value,\n }\n });\n }\n \n data.entries.push({\n name: panel_name,\n code: panel_code,\n code_system: panel_code_system,\n code_system_name: panel_code_system_name,\n tests: tests_data\n });\n });\n \n return data;\n };\n}","/*\n * Parser for the CCDA smoking status in social history section\n */\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.smoking_status = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var data, el;\n \n var name = null,\n code = null,\n code_system = null,\n code_system_name = null,\n entry_date = null;\n \n // We can parse all of the social_history sections,\n // but in practice, this section seems to be used for\n // smoking status, so we're just going to break that out.\n // And we're just looking for the first non-empty one.\n var social_history = ccda.section('social_history');\n var entries = social_history.entries();\n for (var i=0; i < entries.length; i++) {\n var entry = entries[i];\n \n var smoking_status = entry.template('2.16.840.1.113883.10.20.22.4.78');\n if (smoking_status.isEmpty()) {\n smoking_status = entry.template('2.16.840.1.113883.10.22.4.78');\n }\n if (smoking_status.isEmpty()) {\n continue;\n }\n \n el = smoking_status.tag('effectiveTime');\n entry_date = parseDate(el.attr('value'));\n \n el = smoking_status.tag('value');\n name = el.attr('displayName');\n code = el.attr('code');\n code_system = el.attr('codeSystem');\n code_system_name = el.attr('codeSystemName');\n \n if (name) {\n break;\n }\n }\n \n data = {\n date: entry_date,\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name\n };\n \n return data;\n }; \n}","/*\n * Parser for the CCDA vitals section\n */\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.vitals = function (ccda) {\n \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var vitals = ccda.section('vitals');\n \n var data = {}, el;\n data.entries = [];\n data.displayName = \"Vitals\";\n data.templateId = vitals.tag('templateId').attr('root');\n data.text = vitals.tag('text').val(true);\n \n vitals.entries().each(function(entry) {\n \n el = entry.tag('effectiveTime');\n var entry_date = parseDate(el.attr('value'));\n \n var result;\n var results = entry.elsByTag('component');\n var results_data = [];\n \n for (var i = 0; i < results.length; i++) {\n result = results[i];\n \n el = result.tag('code');\n var name = el.attr('displayName'),\n code = el.attr('code'),\n code_system = el.attr('codeSystem'),\n code_system_name = el.attr('codeSystemName');\n \n el = result.tag('value');\n var value = parseFloat(el.attr('value')),\n unit = el.attr('unit');\n \n results_data.push({\n name: name,\n code: code,\n code_system: code_system,\n code_system_name: code_system_name,\n value: value,\n unit: unit\n });\n }\n \n data.entries.push({\n date: entry_date,\n results: results_data\n });\n });\n \n return data;\n };\n}","/*\n * Parser for the CCDAR2 document\n */\n\nvar ParseGenericInfo = require('./generic');\nvar Core = require('../core');\n\nvar DocumentParser = require('./ccdar2/document');\nvar DemographicsParser = require('./ccda/demographics');\nvar HealthConcernsParser = require('./ccdar2/health_concerns');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n self.documentParser = new DocumentParser(self.doc);\n self.demographicsParser = new DemographicsParser(self.doc);\n self.healthConcernsParser = new HealthConcernsParser(self.doc);\n\n self.run = function (ccda) { \n var data = {};\n \n data.document = self.documentParser.document(ccda);\n data.demographics = self.demographicsParser.demographics(ccda);\n data.health_concerns_document = self.healthConcernsParser.health_concerns_document(ccda);\n data.json = Core.json;\n \n // Decorate each section with Title, templateId and text and adds missing sections\n ParseGenericInfo(ccda, data);\n \n return data;\n };\n}\n","/*\n * Parser for the CCDAR2 document section\n */\nvar Core = require('../../core');\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.document = function (ccda) { \n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n var data = {}, el;\n \n var doc = ccda.section('document');\n var date = parseDate(doc.tag('effectiveTime').attr('value'));\n var title = Core.stripWhitespace(doc.tag('title').val());\n \n // Parse Doc Type Info\n var templates = doc.elsByTag('templateId');\n \n var rootTemplate = templates[0].attr('root');\n var secondTemplate;\n if(templates.length >1)\n secondTemplate = templates[1].attr('root');\n else\n secondTemplate = rootTemplate;\n \n var loinc = doc.tag('code').attr('code');\n var templateId = doc.tag('templateId').attr('root');\n var displayName = doc.tag('code').attr('displayName');\n \n var nonXml = doc.tag('nonXMLBody');\n var nonXmlNodes = nonXml.el.childNodes;\n \n var bodyType = \"structured\";\n var nonXmlBody = {\n type: \"\",\n mediaType: \"\",\n representation: \"\",\n rawText: \"\",\n reference: \"\"\n };\n if(nonXmlNodes && nonXmlNodes.length > 0) {\n bodyType = \"unstructured\";\n var text = nonXml.tag('text');\n var mediaType = \"\";\n var representation = \"\";\n var rawText = \"\";\n var reference = \"\";\n var type = \"\";\n \n // We have an embedded doc\n if(text && text.attr('mediaType')) {\n mediaType = text.attr('mediaType');\n representation = text.attr('representation');\n rawText = text.val();\n type = \"embedded\";\n }\n \n if(text && !mediaType) {\n reference = text.tag('reference').attr('value');\n type = \"reference\";\n }\n nonXmlBody = {\n type: type,\n mediaType: mediaType,\n representation: representation,\n rawText: rawText,\n reference: reference\n }\n }\n \n var docType = {\n type: \"CCDAR2\",\n rootTemplateId: rootTemplate,\n templateId: secondTemplate,\n displayName: displayName,\n loinc: loinc,\n bodyType: bodyType,\n nonXmlBody: nonXmlBody\n };\n \n var author = doc.tag('author');\n el = author.tag('assignedPerson').tag('name');\n var name_dict = parseName(el);\n \n el = author.tag('addr');\n var address_dict = parseAddress(el);\n \n el = author.tag('telecom');\n var work_phone = el.attr('value');\n \n var documentation_of_list = [];\n var performers = doc.tag('documentationOf').elsByTag('performer');\n for (var i = 0; i < performers.length; i++) {\n el = performers[i];\n var performer_name_dict = parseName(el);\n var performer_phone = el.tag('telecom').attr('value');\n var performer_addr = parseAddress(el.tag('addr'));\n documentation_of_list.push({\n name: performer_name_dict,\n phone: {\n work: performer_phone\n },\n address: performer_addr\n });\n }\n \n el = doc.tag('encompassingEncounter').tag('location');\n var location_name = Core.stripWhitespace(el.tag('name').val());\n var location_addr_dict = parseAddress(el.tag('addr'));\n \n var encounter_date = null;\n el = el.tag('effectiveTime');\n if (!el.isEmpty()) {\n encounter_date = parseDate(el.attr('value'));\n }\n \n data = {\n type: docType,\n date: date,\n title: title,\n author: {\n name: name_dict,\n address: address_dict,\n phone: {\n work: work_phone\n }\n },\n documentation_of: documentation_of_list,\n location: {\n name: location_name,\n address: location_addr_dict,\n encounter_date: encounter_date\n }\n };\n \n return data;\n };\n}","/*\n * Parser for the CCDAR2 Health Concerns Section\n * 2.16.840.1.113883.10.20.22.2.58\n */\n\nmodule.exports = function(doc) {\n var self = this;\n self.doc = doc;\n\n self.health_concerns_document = function (ccda) {\n var parseDate = self.doc.parseDate;\n var parseName = self.doc.parseName;\n var parseAddress = self.doc.parseAddress;\n \n // Helper to create each iterator for collection\n var each = function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback(this[i]);\n }\n };\n \n var model = {}, el;\n model.entries = [];\n \n model.text = ccda.tag('text').val(true);\n \n var health_concerns = ccda.section('health_concerns_document');\n var title = health_concerns.tag('title').val();\n \n health_concerns.entries().each(function(entry) {\n \n var entryModel = {};\n // Parse out the ACT Body\n //A record of something that is being done, has been done, can be done, or is intended or requested to be done.\n var act = entry.tag('act');\n var er = act.elsByTag('entryRelationship');\n var templateId = act.tag('templateId').attr('root');\n var id = act.tag('id').attr('root');\n var statusCode = act.tag('statusCode').attr('code');\n var code = act.tag('code');\n var name = code.attr('displayName');\n var effectiveTime = parseDate(entry.tag('effectiveTime'));\n \n // The model we want to return in json\n var actModel = {\n effective_time: effectiveTime,\n name: name,\n entry_relationship:[]\n };\n \n // Parse Entity Relationship child nodes\n \n var ers = entry.elsByTag('entryRelationship');\n ers.each = each;\n \n ers.each(function(er){\n \n var erModel = {\n type_code : er.attr('typeCode'),\n observations : []\n };\n \n var obs = er.elsByTag('observation');\n obs.each = each;\n \n // Parse out Obsevations for Each ER\n obs.each(function(ob) {\n erModel.observations.push({\n class_code: ob.attr('classCode'),\n mood_code: ob.attr('moodCode'),\n display_name : ob.tag('value').attr('displayName'),\n status: ob.tag('statusCode').attr('code')\n });\n });\n \n actModel.entry_relationship.push(erModel);\n \n });\n \n // Add ACT Model to our final return model\n entryModel['act'] = actModel;\n model.entries.push(entryModel);\n });\n \n return model;\n }; \n}","/* Parses out basic data about each section */\n\nmodule.exports = function (ccda, data) {\n\n var each = function (callback) {\n for (var i = 0; i < this.length; i++) {\n callback(this[i]);\n }\n };\n\n var containsTemplateId = function(templateId, data) {\n for (var property in data) {\n if (data.hasOwnProperty(property)) {\n var p = data[property].templateId;\n //var display = this[property].displayName;\n if(p) {\n if(p === templateId) {\n //console.log(\"TemplateId Match \" + templateId + \" \" + display);\n return true;\n }\n }\n }\n }\n return false;\n };\n\n var allSections = ccda.elsByTag('section');\n allSections.each = each;\n\n allSections.each(function(s) {\n\n var code = s.tag('code').attr('displayName');\n var templateId = s.tag('templateId').attr('root');\n\n var existingTemplateId = containsTemplateId(templateId, data);\n\n if (code) {\n var nodeName = code.split(' ').join('_').toLowerCase();\n\n //console.log(\"NODE NAME \" + nodeName);\n\n if (!data[nodeName] && !existingTemplateId) {\n //console.log(\"CREATE NODE \" + code);\n data[nodeName] = {};\n }\n\n if(data[nodeName]) {\n data[nodeName].displayName = code;\n data[nodeName].templateId = templateId;\n data[nodeName].text = s.tag('text').val(true);\n }\n\n }\n });\n};","module.exports = require(\"@xmldom/xmldom\");","module.exports = require(\"lodash\");","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","__webpack_require__.g = (function() {\n\tif (typeof globalThis === 'object') return globalThis;\n\ttry {\n\t\treturn this || new Function('return this')();\n\t} catch (e) {\n\t\tif (typeof window === 'object') return window;\n\t}\n})();","","// startup\n// Load entry module and return exports\n// This entry module is referenced by other modules so it can't be inlined\nvar __webpack_exports__ = __webpack_require__(376);\n",""],"names":["Core","require","Documents","Generators","Parsers","module","exports","source","opts","type","parsedData","parsedDocument","parseData","parser","documents","detect","parsers","C32","process","run","CCDA","CCDAR2","CCD","generatorType","template","testingMode","data","Codes","XML","_require","stripWhitespace","json","trim","charAt","parse","e","console","log","JSON","error","datePad","number","replacerFn","key","value","originalValue","Date","isNaN","getTime","_parsedWithTimeData","getHours","getMinutes","getSeconds","getMilliseconds","getUTCFullYear","getUTCMonth","getUTCDate","getUTCHours","getUTCMinutes","getUTCSeconds","getMonth","getDate","getFullYear","stringify","o","y","x","hasOwnProperty","Object","GENDER_MAP","MARITAL_STATUS_MAP","RELIGION_MAP","RACE_ETHNICITY_MAP","ROLE_MAP","PROBLEM_STATUS_MAP","invertKeys","obj","result","keys","i","length","lookupFnGenerator","map","reverseLookupFnGenerator","invertedMap","toLowerCase","gender","reverseGender","maritalStatus","reverseMaritalStatus","religion","reverseReligion","raceEthnicity","reverseRaceEthnicity","role","reverseRole","problemStatus","reverseProblemStatus","str","wrapElement","el","wrapElementHelper","currentEl","content","tag","immediateChildTag","elsByTag","attr","boolAttr","val","isEmpty","els","push","tagAttrVal","getElementsByTagName","getAttribute","templateId","emptyEl","parentNode","contentId","unescapeSpecialChars","s","replace","attrName","attrVal","rawAttr","html","childNodes","textContent","innerHTML","root","XMLSerializer","serializeToString","tagName","slice","docRoot","ownerDocument","contentTag","doc","createElement","xml","isNode","xmldom","DOMParser","parseFromString","window","ActiveXObject","async","loadXML","documentElement","global","document","_typeof","prototype","toString","call","DOMImplementation","createDocument","self","entries","parseDate","parseName","parseAddress","getEntries","each","callback","year","substr","month","parseInt","day","hour","min","secs","utcOffset","_utcOffsetFromString","_toInt","date","UTC","parseTimezoneChunker","parseTokenTimezone","string","possibleTzMatches","match","tzChunk","parts","minutes","argumentForCoercion","coercedNumber","isFinite","Math","floor","ceil","nameEl","prefix","given","family","addrEl","street","city","state","zip","country","section","c32","name","ccda","method","_","now","filename","bb","tagHelpers","ejs","helpers","codes","AllergiesParser","DemographicsParser","DocumentParser","EncountersParser","ImmunizationsParser","MedicationsParser","ProblemsParser","ProceduresParser","ResultsParser","VitalsParser","ParseGenericInfo","allergiesParser","demographicsParser","encountersParser","immunizationsParser","medicationsParser","problemsParser","proceduresParser","resultsParser","vitalsParser","allergies","demographics","encounters","parsedImmunizations","immunizations","administered","immunization_declines","declined","results","medications","problems","procedures","vitals","smoking_status","code","code_system","code_system_name","chief_complaint","text","care_plan","instructions","functional_statuses","displayName","entry","start_date","end_date","reaction_type_name","reaction_type_code","reaction_type_code_system","reaction_type_code_system_name","reaction_name","reaction_code","reaction_code_system","severity","allergen_name","allergen_code","allergen_code_system","allergen_code_system_name","status","date_range","start","end","reaction","reaction_type","allergen","patient","patient_name_dict","dob","marital_status","patient_address_dict","home","work","mobile","email","language","race","ethnicity","birthplace_dict","guardian_relationship","guardian_relationship_code","guardian_home","guardian_name_dict","guardian_address_dict","provider_organization","provider_phone","provider_address_dict","address","phone","birthplace","guardian","relationship","relationship_code","provider","organization","templates","rootTemplate","secondTemplate","loinc","nonXml","nonXmlNodes","bodyType","nonXmlBody","mediaType","representation","rawText","reference","docType","rootTemplateId","title","author","name_dict","address_dict","work_phone","documentation_of_list","performers","performer_name_dict","performer_phone","performer_addr","location_name","location_addr_dict","encounter_date","documentation_of","location","code_system_version","translation_name","translation_code","translation_code_system","translation_code_system_name","performer_name","performer_code","performer_code_system","performer_code_system_name","location_dict","findings","findingEls","translation","performer","administeredData","declinedData","product","product_name","product_code","product_code_system","product_code_system_name","lot_number","manufacturer_name","route_name","route_code","route_code_system","route_code_system_name","instructions_text","education_name","education_code","education_code_system","dose_value","dose_unit","dose_quantity","unit","route","education_type","effectiveTimes","schedule_type","schedule_period_value","schedule_period_unit","institutionSpecified","product_original_text","rate_quantity_value","rate_quantity_unit","precondition_name","precondition_code","precondition_code_system","reason_name","reason_code","reason_code_system","vehicle_name","vehicle_code","vehicle_code_system","vehicle_code_system_name","administration_name","administration_code","administration_code_system","administration_code_system_name","prescriber_organization","prescriber_person","rate_quantity","precondition","reason","schedule","period_value","period_unit","vehicle","administration","prescriber","person","age","parseFloat","comment","specimen_name","specimen_code","specimen_code_system","performer_dict","device_name","device_code","device_code_system","specimen","device","panel_date","panel_name","panel_code","panel_code_system","panel_code_system_name","observation","tests","tests_data","reference_range_text","reference_range_low_unit","reference_range_low_value","reference_range_high_unit","reference_range_high_value","reference_range","low_unit","low_value","high_unit","high_value","entry_date","results_data","j","HealthConcernsParser","documentParser","healthConcernsParser","health_concerns_document","CarePlanParser","FreeTextParser","FunctionalStatusesParser","InstructionsParser","SmokingStatusParser","carePlanParser","freeTextParser","functionalStatusesParser","instructionsParser","smokingStatusParser","free_text","time","effective_time","m","d","D","sectionName","statuses","sig","social_history","model","health_concerns","entryModel","act","er","id","statusCode","effectiveTime","actModel","entry_relationship","ers","erModel","type_code","observations","obs","ob","class_code","mood_code","display_name","containsTemplateId","property","p","allSections","existingTemplateId","nodeName","split","join"],"sourceRoot":""}
|